YUI 中 onDOMReady 的 iframe bug
好友怿飞前不久总结过:模拟兼容性的 addDOMLoadEvent 事件
需要特别注意:在 iframe 中,doScroll 方法不会抛异常。需要用 onreadystatechange 来模拟:
// from jQuery 1.3.2
// If IE event model is used
} else if ( document.attachEvent ) {
// ensure firing before onload,
// maybe late but safe also for iframes
document.attachEvent("onreadystatechange", function() {
if ( document.readyState === "complete" ) {
// ...
}
});
// If IE and not an iframe
// continually check to see if the document is ready
if ( document.documentElement.doScroll && window == window.top ) (function() {
// doScroll ...
})();
}
YUI 用户要小心:目前在 YUI 2.7 和 YUI 3.0 pb1 中,均未修复此 bug. 在 iframe 中,请尽量将 js 代码放在文件尾部以避免此问题。
在 YUI 2.8 中,该 bug 已修复:Ticket #2008289. 从 bug 被提交,到问题解决,历时一年多,囧。

August 4th, 2009 on 7:56
IE8支持doScroll吗?我测试一个例子在IE6/IE7中好用。在IE8中doScroll没反应
August 4th, 2009 on 17:03
方便请教博主一个问题吗?为什么淘宝页面的DOCTYPE从XHTML1.1 transactional逐渐转为HTML4.01 Strict定义? 各浏览器对二种DTD定义下文档解释的差异在什么地方? 找不到相关资料,你们对此应该有过详细的研究和测试,希望得到您的帮助,谢谢!
August 5th, 2009 on 21:45
在 YUI 2.8 中,该 bug 已修复:Ticket #2008289. 从 bug 被提交,到问题解决,历时一年多,囧。
为啥用了一年多呢…
September 9th, 2009 on 8:02
Thanks,正好通過這個解決了一個iframe的問題
September 13th, 2009 on 16:55
貌似早期的jq还用typeof window.frameElement === “undefined”判断
没iframe的时候window.frameElement为null…
September 13th, 2009 on 17:24
@vapour
ie8没问题的…
November 27th, 2009 on 10:49
推荐使用以下方法实现:
window.wby||(window['wby']={});
wby.VERSION =”1.0.1″;
//DOM装载完毕
wby.dom={
onload:function(c) {
if (window.addEventListener)
window.addEventListener(“load”, c, false);
else if (window.attachEvent)
window.attachEvent(“onload”, c);
else {
var d = window["onload"];
window["onload"] = d != f ? this.ca( [ c, d ]) : c
}
},
ca:function(a) {
return function() {
for ( var b = 0; b < a.length; b++)
a[b]()
}
}
}
wby.ready=wby.dom.onload; //DOM准备就绪
在使用的时候只需要如下:
wby.ready(function(){
//你的代码
});
November 27th, 2009 on 13:57
@icerain: 你的代码不是 domready, 而是 window.onload
leave a reply