繁体   English   中英

IE9的注入脚本标签的执行顺序是否存在已知的解决方法?

[英]Is there a known workaround for IE9's execution order of injected script tags?

我确定我没有完全理解这个问题,但是似乎我们的项目在IE9上看到了奇怪的行为,某种程度上与通过对document.write调用注入的JavaScript的无序执行有关。 :

document.write('<scr'+'ipt type="text/javascript" src="'+file1+'"></src'+'ipt>');
document.write('<scr'+'ipt type="text/javascript" src="'+file2+'"></src'+'ipt>');
document.write('<scr'+'ipt type="text/javascript" src="'+file3+'"></src'+'ipt>');

我有限的Google研究表明,IE9将以与其他浏览器(特别是Firefox和Chrome)不同的顺序执行以这种方式注入的脚本。 是否有更好的方法来实现我们要实现的目标,从而确保所有浏览器的执行顺序相同?

我回想一下:我们并不真正在乎所有浏览器,仅在Chrome和IE9上。

我猜你可以链接一个的onload事件来启动另一个的加载:

var newJS= document.createElement('script');
newJS.onload=function() {alert("done")} //or call next load function
newJS.src="..."
document.body.appendChild(newJS)

使用脚本加载器(例如我写的脚本加载器LABjs ),该加载器将规范跨各种浏览器进行加载的所有不同怪癖。 还有一点好处:它不使用那个令人讨厌的document.write()。 LABjs将允许您异步(并行)加载所有脚本,但要确保它们以正确的顺序执行。 听起来基本上就是您想要的。

因此,以这种方式编写脚本标签的优势在于它们是异步加载的 我不知道浏览器如何做到这一点的细微差别,但我以为它们在下载时会以没有特定顺序的方式执行。 HTML5 async属性的行为类似。

还有另一个HTML5属性defer ,它使脚本按顺序执行,但以非阻塞方式执行。 您可以尝试将其添加到生成的<script>标记中。 IE9 部分兑现了它

我为此专门编写了一个小脚本:

https://github.com/mudroljub/js-async-loader

简而言之,它异步加载所有脚本,然后执行它们。 看起来像这样:

for (var lib in libs) {
    loadAsync(lib);
}

而且您不需要document.write() ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM