<script>
document.write("before write h1.js"+"<br/>");
document.write("<script src='h" + "1.js'><\/script>");
document.write("after write h1.js" +"<br/>");
</script>
h1.js文件:
这是h1.js
在IE中,结果将是:
Firefox Chrome Safari Opera:
我怎样才能编写一个脚本,使其在所有浏览器中都具有相同的顺序。
答案 0 :(得分:1)
这应该在所有浏览器中都一样:
<script>
document.write('before h1.js');
</script>
<script src="h1.js"></script>
<script>
document.write('after h1.js');
</script>
答案 1 :(得分:0)
可以这样想:IE执行您的脚本,将新内容添加到document
,然后检查内容。
因此,如果您的h1.js
脚本写入文档,那么在您的JavaScript完成后,此代码将被执行。这是由于JavaScript的同步特性。
如果你想避免这种情况,通常的解决方案是让h1.js
定义一个你可以在适当的时候调用的函数。然后,你可以写:
<script>document.write("<script src='h" + "1.js'><\/script>");</script>
<script>
document.write("before write h1.js"+"<br/>");
document.write(h1());
document.write("after write h1.js" +"<br/>");
</script>
第一个脚本块允许您加载该功能。完成后,IE将解析新代码。然后它将运行第二个代码块并定义函数。
答案 2 :(得分:0)
查看Steve Souders的this博客文章,了解异步加载脚本并确保订单的技术问题。
来自同一参考
document.write脚本标记 - 将HTML写入 使用document.write的页面。这只会加载脚本而不会阻塞 IE。
这就是为什么你能够看到如此不同的执行顺序的原因。脚本加载没有阻止执行after write h1.js
。它只发生在IE