这是我的问题 - 我需要使用jQuery.getScript()动态下载几个脚本,并在加载所有脚本后执行某些JavaScript代码,所以我的计划是做这样的事情:
function GetScripts(scripts, callback)
{
var len = scripts.length
for (var i in scripts)
{
jQuery.getScript(scripts[i], function()
{
len --;
// executing callback function if this is the last script that loaded
if (len == 0)
callback()
})
}
}
Run Code Online (Sandbox Code Playgroud)
如果我们假设每个脚本的script.onload事件触发并按顺序和同步执行,那么这只能可靠地工作,所以当两个或多个事件处理程序通过检查(len == 0)并执行时,永远不会出现这种情况.回调方法.
所以我的问题 - 这个假设是正确的,如果没有,那么实现我想做的事情的方法是什么?
我有以下脚本,其中第一个和第三个document.writeline是静态的,第二个是生成的:
<script language="javascript" type="text/javascript">
document.write("<script language='javascript' type='text/javascript' src='before.js'><\/sc" + "ript>");
document.write("<script language='javascript' type='text/javascript'>alert('during');<\/sc" + "ript>");
document.write("<script language='javascript' type='text/javascript' src='after.js'><\/sc" + "ript>");
</script>
Run Code Online (Sandbox Code Playgroud)
Firefox和Chrome将显示之前,期间和之后,在Internet Explorer的第一个节目期间才把它显示之前和之后.
我遇到过一篇文章,说我不是第一个遇到这个问题的文章,但这并不能让我感觉更好.
有没有人知道如何在所有浏览器中将命令设置为确定性,或者黑客IE浏览器像所有其他浏览器一样工作?
警告:代码片段是一个非常简单的repro.它是在服务器上生成的,第二个脚本是唯一发生变化的脚本.这是一个很长的脚本,并且之前和之后有两个脚本的原因是浏览器将缓存它们,并且代码的动态部分将尽可能小.它也可能在具有不同生成代码的同一页面中多次出现.