我有以下脚本,其中第一个和第三个document.writeline
是静态的,第二个是生成的:
Firefox和Chrome将显示之前,期间和之后,在Internet Explorer的第一个节目期间才把它显示之前和之后.
我遇到过一篇文章,说我不是第一个遇到这个问题的文章,但这并不能让我感觉更好.
有没有人知道如何在所有浏览器中将命令设置为确定性,或者黑客IE浏览器像所有其他浏览器一样工作?
警告:代码片段是一个非常简单的repro.它是在服务器上生成的,第二个脚本是唯一发生变化的脚本.这是一个很长的脚本,并且之前和之后有两个脚本的原因是浏览器将缓存它们,并且代码的动态部分将尽可能小.它也可能在具有不同生成代码的同一页面中多次出现.
不,这是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有点不太自以为是.
我找到了更多我喜欢的答案:
这将推迟双方的装载期间和之后,直到页面加载完成.
我认为这是我能得到的最好的.希望有人能够给出更好的答案.