繁体   English   中英

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

[英]document.write() in IE executive order is not the same by others

   <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

Firefox Chrome Safari Opera:

  1. 在写h1.js之前
  2. 这是h1.js
  3. 写完h1.js之后

我如何编写脚本以使其在所有浏览器中都具有相同的顺序。

这在所有浏览器中都应该相同:

<script>
    document.write('before h1.js');
</script>
<script src="h1.js"></script>
<script>
    document.write('after h1.js');
</script>

可以这样想: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将解析新代码。 然后它将运行第二个代码块,并且将定义函数。

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

来自同一参考

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

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

暂无
暂无

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

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