我正在尝试动态预加载文件列表,这些文件可能是图像和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
}
我缺少什么相关的东西?
更新:一天之后没有取得任何成功。可能会暂时离开它,只是跳过预先加载带有边缘的脚本文件,直到找到解决方案。
答案 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