IE执行顺序中的document.write()与其他人不一样

时间:2012-05-14 09:46:03

标签: javascript internet-explorer document.write

   <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中,结果将是:

  1. 在写h1.js之前
  2. 写完h1.js后
  3. 这是h1.js
  4. Firefox Chrome Safari Opera:

    1. 在写h1.js之前
    2. 这是h1.js
    3. 写完h1.js后
    4. 我怎样才能编写一个脚本,使其在所有浏览器中都具有相同的顺序。

3 个答案:

答案 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