当前位置:  开发笔记 > 编程语言 > 正文

JavaScript的document.write内联脚本执行顺序

如何解决《JavaScript的document.write内联脚本执行顺序》经验,为你挑选了2个好方法。

我有以下脚本,其中第一个和第三个document.writeline是静态的,第二个是生成的:


Firefox和Chrome将显示之前,期间之后,在Internet Explorer的第一个节目期间才把它显示之前之后.

我遇到过一篇文章,说我不是第一个遇到这个问题的文章,但这并不能让我感觉更好.

有没有人知道如何在所有浏览器中将命令设置为确定性,或者黑客IE浏览器像所有其他浏览器一样工作?

警告:代码片段是一个非常简单的repro.它是在服务器上生成的,第二个脚本是唯一发生变化的脚本.这是一个很长的脚本,并且之前和之后有两个脚本的原因是浏览器将缓存它们,并且代码的动态部分将尽可能小.它也可能在具有不同生成代码的同一页面中多次出现.



1> Timothy Lee ..:

不,这是Internet Explorer的行为.

如果您动态附加脚本,IE,Firefox和Chrome都将以异步方式下载脚本.

Firefox和Chrome将等待所有异步请求返回,然后按照它们在DOM中附加的顺序执行脚本,但IE按照它们通过网络返回的顺序执行脚本.

由于警报比外部javascript文件花费更少的时间来"检索",这可能解释了您所看到的行为.

来自Kristoffer Henriksson 关于异步脚本加载主题的帖子:

在这种情况下,IE和Firefox将下载这两个脚本,但Internet Explorer也将按照他们完成下载的顺序执行它们,而Firefox以异步方式下载它们,但仍然按照它们在DOM中附加的顺序执行它们.

在Internet Explorer中,这意味着您的脚本不能相互依赖,因为执行顺序会因网络流量,缓存等而异.

考虑使用Javascript加载器.它可以让您指定脚本依赖性和执行顺序,同时还可以异步加载脚本以提高速度,并平滑一些浏览器差异.

这是对其中一些的非常好的概述:基本JavaScript:前五个脚本加载器.

我已经使用过RequireJS和LabJS.在我看来,LabJS有点不太自以为是.



2> Omer van Klo..:

我找到了更多我喜欢的答案:


这将推迟双方的装载期间之后,直到页面加载完成.

我认为这是我能得到的最好的.希望有人能够给出更好的答案.


Internet Explorer在外部脚本之前运行内联脚本.要获得一致的订单,请将内联代码移动到外部文件.
推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有