1
   <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 file:

This is h1.js


In IE the result will be:

  1. before write h1.js
  2. after write h1.js
  3. This is h1.js

Firefox Chrome Safari Opera:

  1. before write h1.js
  2. This is h1.js
  3. after write h1.js

How could I write a script to make it the same order in all brower.

4

3 回答 3

1

这应该在所有浏览器中都一样:

<script>
    document.write('before h1.js');
</script>
<script src="h1.js"></script>
<script>
    document.write('after h1.js');
</script>
于 2012-05-14T09:54:30.217 回答
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 将解析新代码。然后它将运行第二个代码块并定义函数。

于 2012-05-14T10:00:21.930 回答
0

查看Steve Souders 的这篇博文,了解异步加载脚本和确保顺序的技术中的问题。

来自同一个参考

document.write 脚本标签– 使用 document.write 将 HTML 写入页面。这只会加载脚本而不会在 IE 中阻塞。

这就是为什么您能够看到如此多变的执行顺序的原因。脚本加载没有阻止after write h1.js执行。它只发生在 IE 中

于 2012-05-14T11:40:46.703 回答