window.onload在IE 8、9加载动态脚本之前执行

window.onload is executed before the dynamic script is loaded in IE 8, 9

在我的项目中,window.onload在IE 8、9中加载动态脚本之前执行。

我有以下代码。


index.html

<DOCTYPE html>
<html>
  <head>
    <script>
      var eScript = document.createElement('script');
      eScript.type = 'text/javascript';
      eScript.src = './script.js';

      var eHead = document.querySelector('head');
      eHead.appendChild(eScript);

      window.onload = function() {
        console.log('all resource is loaded');
      }
    </script>
  </head>
  <body>
  </body>
 </html>

script.js

console.log('[START] script.js');

控制台输出为:

IE 8、9

> all resource is loaded
> [START] script.js

IE 10、11

[START] script.js
all resource is loaded

问题?

我知道 window.onload 将在下载页面所需的所有资源后 运行。 IE 10、11 按预期工作,但 IE 8、9 行为不正确。

我需要一个事件侦听器,它将在所有动态资源(如script.js)下载完毕后调用,并且在 IE 8 和 9 中 运行。如果有这样的,我将不胜感激方式。

我该怎么办?谢谢。

有两个问题:何时加载脚本,何时加载文档 - 由于 IE 显然出于某种原因当时不将动态注入的脚本作为 window 的一部分,而其他人则这样做。

无论如何 - window.onload 控制后者(文档加载)。您可以手动控制前者(脚本加载)。只需将最后一个脚本设置为 <script> start(); </script>。只要没有脚本是 defer,这应该确保您的 start 函数在加载所有内容时执行。或者,您可以附加 eScript.onload 处理程序,以确切知道一切何时完成。

或者,您可以使用众所周知且经过充分测试的脚本加载器,例如 headjs