IE有时候不会上火!

时间:2010-12-26 16:11:25

标签: javascript internet-explorer javascript-events

我已将此代码加载到正文中的脚本中。

(function() {
attach = function() {
       blablablablbalabl;
};

if (window.addEventListener){  
    window.addEventListener('load', attach, false);   
} else if (window.attachEvent){      
    window.attachEvent('onload', attach);  
}  
})();

问题是,有时候(5次尝试中有4次)我正在刷新IE,它不会附加()! 而在其他浏览器中,它会调用100%的时间!

我疯了!

由于

3 个答案:

答案 0 :(得分:1)

jQuery使用一些技巧来解决这个问题。

它会将自己附加到onreadystatechange以及onload

    // If IE event model is used
    } else if ( document.attachEvent ) {
        // ensure firing before onload,
        // maybe late but safe also for iframes
        document.attachEvent("onreadystatechange", DOMContentLoaded);

        // A fallback to window.onload, that will always work
        window.attachEvent( "onload", jQuery.ready );

        // If IE and not a frame
        // continually check to see if the document is ready
        var toplevel = false;

        try {
            toplevel = window.frameElement == null;
        } catch(e) {}

        if ( document.documentElement.doScroll && toplevel ) {
            doScrollCheck();
        }
    }

此外,它会不断检查页面是否可以滚动。加载DOM后,页面变为可滚动,因此触发jQuery.ready

// The DOM ready check for Internet Explorer
function doScrollCheck() {
    if ( jQuery.isReady ) {
        return;
    }

    try {
        // If IE is used, use the trick by Diego Perini
        // http://javascript.nwbox.com/IEContentLoaded/
        document.documentElement.doScroll("left");
    } catch(e) {
        setTimeout( doScrollCheck, 1 );
        return;
    }

    // and execute any waiting functions
    jQuery.ready();
}

您可以尝试在应用中实现此行为,或直接使用jQuery。

答案 1 :(得分:0)

这会有用吗?

(function() {
var callback = null;
attach = function() {
       blablablablbalabl;
       callback.apply();

};
callback = window.onload;
window.onload = attach;
})();

答案 2 :(得分:0)

我最近经历过类似的事情,在IE中没有触发设置load事件监听器的外部脚本。

我注意到如果我将脚本内联到文档主体中,那么它会可靠地触发。让我相信这是某种竞争条件,onload事件会在外部脚本被完全解析之前触发。

要检查的其他事项是,是否有另一个脚本取消事件传播以及您的函数回调是否在IE中引发异常,例如错误地假设“此”指向