Internet Explorer中未触发Javascript DOMContentLoaded事件

Internet Explorer中未触发Javascript DOMContentLoaded事件,javascript,internet-explorer,dom-events,Javascript,Internet Explorer,Dom Events,我有以下代码将函数附加到DOMContentLoaded事件,但在Internet Explorer 11中从未调用该函数 代码: if (document.addEventListener) { document.addEventListener("DOMContentLoaded", init, false); } else { document.attachEvent("onDOMContentLoaded", init); } 它可能不会开火有几个原因: 它已经启动(在您附

我有以下代码将函数附加到
DOMContentLoaded
事件,但在Internet Explorer 11中从未调用该函数

代码:

if (document.addEventListener) {
   document.addEventListener("DOMContentLoaded", init, false);
}
else {
   document.attachEvent("onDOMContentLoaded", init);
}

它可能不会开火有几个原因:

  • 它已经启动(在您附加事件处理程序之前),您错过了它
  • 您运行的是不支持
    DOMContentLoaded
    事件的旧版本IE
  • 在这些代码行之前存在某种脚本错误,因此这些代码行没有实际执行,因此事件处理程序从未实际注册
  • 您试图在嵌入式iFrame上执行此操作,但可能没有iFrame的正确文档(某些浏览器在加载外部源代码时可以切换文档)
  • 要检查脚本错误,应在IE中打开调试控制台(按F12键),并查看控制台以查看是否报告了任何脚本错误

    您可以检查document.readyState==“complete”是否已启动

    而且,在IE9之前的IE版本中,您需要
    attachEvent
    ,IE不支持
    DOMContentLoaded
    ,因此您的else分支无法工作。在那些旧版本的IE中,您必须使用不同的检测方法


    您可以在此处看到一个经过良好测试的跨浏览器纯javascript函数,用于在文档准备就绪时获得通知:。

    要使用一个可行的示例对此进行分解,请参见下文。我发现的问题是,
    DOMContentLoaded
    不会为
    javascript
    触发,除非事件是在文档本身内联创建的

    一个简单的解决方案是在文档
    readyState
    中添加一个检查。如果仍在加载-创建事件,因为可以触发
    DOMContentLoaded
    ,否则只需立即加载,因为DOM已准备就绪

    var load = function () {
        console.log('I will always load, woohoo');
    };
    
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', load); // Document still loading so DomContentLoaded can still fire :)
    } else {
        load();
    }
    

    您能指定您调用此代码的位置、加载文档时的任何位置或单击按钮!??请创建一个JSFIDLE,以便我们能够更好地提供帮助。