我正在使用JavaScript动态加载脚本和样式表,类似于这个的例子。
问题在于浏览器不会等待脚本加载完成。
假设我有一个名为functionToBeCalled()的函数,它在名为script-file.js的脚本文件中。
我有一个加载脚本文件的函数。
现在的情况是当浏览器加载脚本标签时,它不等待该标签的加载而继续执行下一条命令。我收到了一个“undefined functionToBeCalled() ”错误。这是正常的。但事实是,当我在Firebug中检查时,脚本标签已经被形成并且文件已经加载。
问题在于浏览器不会等待脚本加载完成。
假设我有一个名为functionToBeCalled()的函数,它在名为script-file.js的脚本文件中。
我有一个加载脚本文件的函数。
<script type="text/javascript">
var listOfJavaScriptsLoaded = new Array();
function LoadScriptFile(scriptUrl){
var isScriptLoaded = false;
var i = 0;
for(i = 0; i < listOfJavaScriptsLoaded.length; i ++){
if(listOfJavaScriptsLoaded[i] == scriptUrl){
isScriptLoaded = true;
break;
}
}
if(isScriptLoaded == false){
var headTag= document.getElementsByTagName('head')[0];
var scriptTag= document.createElement('script');
scriptTag.type= 'text/javascript';
scriptTag.src= scriptUrl;
headTag.appendChild(scriptTag);
listOfJavaScriptsLoaded.push(scriptUrl);
}
}
LoadScriptFile("script-file.js");
functionToBeCalled();
</script>
现在的情况是当浏览器加载脚本标签时,它不等待该标签的加载而继续执行下一条命令。我收到了一个“undefined functionToBeCalled() ”错误。这是正常的。但事实是,当我在Firebug中检查时,脚本标签已经被形成并且文件已经加载。
那么,如何使浏览器在资产加载后暂停加载并恢复呢?
编辑1:此问题仅在通过ajax加载页面时出现,而不是在普通页面加载中出现
编辑2:是否有可能从JavaScript读取脚本/ CSS文件并将其直接写入标记内的脚本标签中?
如果使用window.stop(),则加载会完全停止。如何让它从同一行继续运行呢?
或者,是否可以使浏览器认为加载仍在进行中,并在onload事件中重置它?
<script>
标签绝对不是一个选项吗?这样会简单得多。 - Pekka<script src='...'>
标签放在页面主体中,页面加载将会等待脚本加载完成。 - Pekka<script src="script-file.js"></script>
。我将我的答案更详细地阐述了这一点。 - Pekka