繁体   English   中英

document.attachEvent()在IE8中不起作用

[英]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中,控制台输出为:

ie8output

有什么明显的原因为什么会在下面的代码中发生这种情况?

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.attachEventAdding 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);   

}

相关更改:

  1. 增加了对了解何时加载脚本的较旧方法的支持。
  2. 由于侦听多种机制,请确保没有重复的负载通知
  3. 在插入脚本标记之前,请设置.src

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM