onreadystatechange IE所有版本的浏览器模式更改



我正在做类似jQuery document.ready()函数的事情。这是我的代码:

var ready = function(callBack){
    if(document.readyState=="interactive"||document.readyState=="complete"){
        console.log("already : "+document.readyState);
        callBack();
    }else{
        document.onreadystatechange = function(){
            console.log("change : "+document.readyState);
            if(document.readyState=="interactive"){
                callBack();
            }
        }   
    }
}

并使用类似:

ready(function(){
    alert(document.querySelector(".try").innerHTML);
});

我的问题是它适用于所有浏览器。但是当我在IE控制台页面上更改浏览器模式时document.readyState给出的结果"interactive".所以我认为这首先是一个缓存问题,但是当发生这种情况时,我无法在页面中使用我的元素。任何人都可以提供帮助或有想法吗?

我找到了解决方案:

var ready = function(callBack){
    if(document.addEventListener){
        document.addEventListener("DOMContentLoaded",callBack,false);
    }else if(document.attachEvent){
        try{
            var isFrame = window.frameElement != null;
        }catch(e){
        }
        if(document.documentElement.doScroll&&!isFrame){
            function tryScroll(){
                try{
                    document.documentElement.doScroll("left");
                    callBack();
                }catch(e){
                    setTimeout(tryScroll,10);
                }
            }
            tryScroll();
        }
        if(isFrame){
            document.attachEvent("onreadystatechange", function(){
                if (document.readyState==="complete"){
                    callBack();
                }
            });
        }
    }   
}

最新更新