我已将此代码加载到正文中的脚本中。
(function() {
attach = function() {
blablablablbalabl;
};
if (window.addEventListener){
window.addEventListener('load', attach, false);
} else if (window.attachEvent){
window.attachEvent('onload', attach);
}
})();
问题是,有时候(5次尝试中有4次)我正在刷新IE,它不会附加()! 而在其他浏览器中,它会调用100%的时间!
我疯了!
由于
答案 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中引发异常,例如错误地假设“此”指向