object.onload因IE和Edge而失败

时间:2016-12-20 13:59:47

标签: javascript html object preload

我正在尝试动态预加载文件列表,这些文件可能是图像和JavaScript文件之间的任何内容。 Chrome和Firefox的一切都超级平稳,但是当我尝试使用Edge预加载JavaScript文件时失败了。 Edge仍然可以处理图像,例如但没有js文件。是的,我尝试过addEventListener,它也没有用。

Edge不会给我任何错误。

    var object = {};
    object = document.createElement('object');
    object.width = object.height = 0;
    object.data = path/to/javascriptfile.js
    body.appendChild(object);

    object.onload = function(){
         console.log('hello world')
         //not firing with edge
    }

我缺少什么相关的东西?

更新:一天之后没有取得任何成功。可能会暂时离开它,只是跳过预先加载带有边缘的脚本文件,直到找到解决方案。

2 个答案:

答案 0 :(得分:1)

或许值得一试 - 来自msdn:

  

客户端尽快加载应用程序,嵌入对象和图像   它在解析过程中遇到applet,embed和img对象。   因此,这些对象的onload事件发生在之前   客户端解析任何后续对象。确保事件处理程序   接收这些对象的onload事件,放置脚本对象   在对象之前定义事件处理程序并使用onload   对象中的属性用于设置处理程序。

https://msdn.microsoft.com/en-us/library/windows/apps/hh465984.aspx

编辑,澄清:

在将元素添加到页面之前,您应该附加事件侦听器。

即使这样做,我也不确定它是否会起作用。但要确保您已经用尽所有选项,请尝试以下示例:

function doLoad() {
   console.log('The load event is executing');
}

var object = {};
object = document.createElement('object');
object.width = object.height = 0;
object.data = 'path/to/javascriptfile.js';

object.onreadystatechange = function () {
   if (object.readyState === 'loaded' || object.readyState === 'complete') doLoad();
   console.log('onreadystatechange');
}

if (object.addEventListener) { 
   object.addEventListener( "load", doLoad, false );
   console.log('addEventListener');
}
else 
{
   if (object.attachEvent) { 
      object.attachEvent( "onload", doLoad );
      console.log('attachEvent');
   } else if (object.onLoad) {
      object.onload = doLoad;
      console.log('onload');
   }
}

var body = document.getElementsByTagName("body")[0];    
body.appendChild(object);

如果这不起作用,你可以在IE中使用“image”而不是“object”进行预加载:https://stackoverflow.com/a/11103087/1996783

答案 1 :(得分:0)

工作临时解决方案是将onload事件直接放到脚本元素而不是对象上。这很令人难过,因为它在Chrome和&amp ;; FF。

事实证明,带有css源的object.data也没有加载。我不知道它是否是一个bug,因为它仍然可以将图像加载到object.data。

但是节目必须继续。

干杯,eljuko