JQuery 1.3.2 中源碼實(shí)現(xiàn)如下:
// If IE and not an iframe // continually check to see if the document is ready if ( document.documentElement.doScroll && window == window.top ) (function(){ 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( error ) { setTimeout( arguments.callee, 0 ); return; } // and execute any waiting functions jQuery.ready(); })();
YUI 2.7.0 中源碼實(shí)現(xiàn)如下:
if (EU.isIE) { // Process onAvailable/onContentReady items when the // DOM is ready. YAHOO.util.Event.onDOMReady( YAHOO.util.Event._tryPreloadAttach, YAHOO.util.Event, true); var n = document.createElement('p'); EU._dri = setInterval(function() { try { // throws an error if doc is not ready n.doScroll('left'); clearInterval(EU._dri); EU._dri = null; EU._ready(); n = null; } catch (ex) { } }, EU.POLL_INTERVAL); }
另外對(duì)于版本小于 Safari 3+ 的 Safari 瀏覽器,John Resig 也提供了一個(gè)解決方案:
if (/WebKit/i.test(navigator.userAgent)) { // sniff var _timer = setInterval(function() { if (/loaded|complete/.test(document.readyState)) { clearInterval(_timer); init(); // call the onload handler } }, 10); }
懌飛提示:
- 如果腳本是動(dòng)態(tài)注入到頁(yè)面上,則原生的 DOMContentReady 事件是不會(huì)被觸發(fā)(即:IE 除外)。
- IE 下對(duì)于在 iframe 里的使用 addDOMLoadEvent 事件,需做處理和慎用(這一點(diǎn) YUI 做得不如 JQuery 細(xì)致)。
// form JQuery 1.3.2 // ensure firing before onload, maybe late but safe also for iframes document.attachEvent("onreadystatechange", function(){ if ( document.readyState === "complete" ) { document.detachEvent( "onreadystatechange", arguments.callee ); jQuery.ready(); } });
擴(kuò)展閱讀:
原文:http://www.planabc.net/2009/07/30/adddomloadevent/
本文鏈接:http://www.95time.cn/tech/web/2009/6922.asp
出處:藍(lán)色理想
責(zé)任編輯:bluehearts
上一頁(yè) 模擬兼容性的addDOMLoadEvent事件 [1] 下一頁(yè)
◎進(jìn)入論壇網(wǎng)頁(yè)制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評(píng)論。
|