功能检测支持DOMContentLoaded事件

Web*_*ner 11 javascript events javascript-events domcontentloaded browser-feature-detection

是否有可能检测到对DOMContentLoaded事件的支持?

方法就像Kangax的解决方案在这里不起作用,因为DOMContentLoaded它不作为任何元素的属性公开:在没有浏览器嗅探的情况下检测事件支持

TxR*_*gex 3

只需监听所有三个事件,第一个触发的事件获胜。如果获胜者是 DOMContentLoaded,则支持。如果在其他两个之一被触发时它还没有被触发,那么它不受支持。

<script>
    var hasDOMContentLoaded = false,
        ready = false,
        readyMethod = null;

    // Listen for "DOMContentLoaded"
    document.addEventListener("DOMContentLoaded", function(event) {
        hasDOMContentLoaded = true;
        init("DOMContentLoaded");
    });

    // Listen for "onreadystatechange"
    document.onreadystatechange = function () { init("onreadystatechange"); }

    // Listen for "load"
    document.addEventListener("load", function(event) { init("load"); });

    // Gets called after any one of the above is triggered. 
    function init(method) {
        if(!ready) {
            ready = true;
            readyMethod = method;
            go();
        }
    }

    // Page is ready, time is up. 
    // Eitehr DOMContentLoaded has been triggered or it never will.
    function go() {
        console.log("hasDOMContentLoaded: ", hasDOMContentLoaded);
        // My initialization code here
    }

</script>
Run Code Online (Sandbox Code Playgroud)