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

时间:2014-01-17 11:06:20

标签: javascript

我正在做类似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();
            }
        }   
    }
}

使用like:

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

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

1 个答案:

答案 0 :(得分:0)

我找到了解决方案:

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();
                }
            });
        }
    }   
}