[英]document.attachEvent() not working in IE8
我知道在Internet Explorer(Pre-IE9)中,您不能使用document.addEventListener()
,而必须使用document.attachEvent
。 我遇到的问题是document.attachEvent('onload', AddExternals);
什么也不做。 在控制台中,输出应如下所示:
- document.attachEvent - Adding Externals... - jQuery loaded!
但是,在IE8中,控制台输出为:
有什么明显的原因为什么会在下面的代码中发生这种情况?
if (document.addEventListener) {
console.log("document.addEventListener")
document.addEventListener("DOMContentLoaded", AddExternals);
} else if (document.attachEvent) {
console.log("document.attachEvent")
document.attachEvent("onload", AddExternals);
}
function AddExternals(){
console.log("Adding Externals...");
var jq = document.createElement("script");
jq.type = "text/javascript";
document.getElementsByTagName("head")[0].appendChild(jq);
jq.onload = function(){console.log("jQuery loaded!")};
jq.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js";
}
编辑
我已经更改了document.attachEvent("onload", AddExternals)
,现在控制台同时输出document.attachEvent
和Adding Externals...
但是功能永远不会完成?
据我所知,没有document.onload
事件。 相反,您将使用window.onload
作为后备。 您可能还必须测试文档状态,以确保尚未加载它(例如,事件已经触发)。
要使经过全面测试的函数知道何时在任何级别的浏览器中准备好文档,请参见此先前的问题/解答中的代码: 纯JavaScript等效于jQuery的$ .ready()如何在页面/ dom准备就绪时调用函数它
请记住,较早版本的IE脚本标记没有.onload
,因此您不一定会看到该控制台消息,但脚本仍应加载。 这里有一个更复杂的方案,当您为IE的较早版本加载时,它会通知您: javascript在IE中动态加载脚本时通知
我建议您将脚本更改为此:
function AddExternals(){
var doneLoad = false;
function onload() {
if (!doneLoad) {
doneLoad = true;
console.log("jQuery loaded!")
}
}
console.log("Adding Externals...");
var jq = document.createElement("script");
jq.type = "text/javascript";
jq.onload = doneLoad;
jq.onreadystatechange= function () {
if (script.readyState == "loaded" || script.readyState == "complete"){
doneLoad();
}
};
jq.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js";
document.getElementsByTagName("head")[0].appendChild(jq);
}
相关更改:
.src
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.