// START DOMContentLoaded
// Mozilla と Opera 9 は、使用できるイベントを公開します
if(document.addEventListener){
// 注意:
// Firefox 2.0 のスレッドの問題のため、そのプラットフォームでは
// DOMContentLoaded を有効にすることができません。詳細については、次を参照してください:
// http://trac.dojotoolkit.org/ticket/1704
if(dojo.isOpera || dojo.isFF >= 3 || (dojo.isMoz && dojo. config.enableMozDomContentLoaded === true)){
document.addEventListener("DOMContentLoaded", dojo._loadInit, null);
}
// 主に Opera 8.5 の場合、DOMContentLoaded がすでに起動されている場合は起動されません。
// trac #1640 のため Mozilla にも使用
window.addEventListener("load", dojo._loadInit, null);
}
if(dojo.isAIR){
window.addEventListener("load", dojo._loadInit, null);
}else if(/(WebKit|khtml)/i.test(navigator.userAgent)){ // スニフ
dojo._khtmlTimer = setInterval(function(){
if(/loaded|complete/ .test(document.readyState)){
dojo._loadInit(); // onload ハンドラーを呼び出します
}
}, 10);
}
// END DOMContentLoaded
(function(){
var _w = window;
var _handleNodeEvent = function(/*String*/evtName, /*Function*/fp){
// 概要:
// 指定された関数をノードの
// evtName ハンドラーに非破壊的に追加します。
// evtName: 「onclick」ハンドラーの場合は「onclick」の形式にする必要があります。 .
// 「on」部分を必ず渡してください。
var oldHandler = _w[evtName] ||
_w[evtName] = function(){ fp.apply(_w, argument);
oldHandler.apply(_w, argument);
if(dojo.isIE){
// Internet Explorer の場合。 readyState は init
// 呼び出しでは達成されませんが、Dojo では必要ありません。ただし、これを含めます
// 他の関数が追加されているかどうかは不明なので
/ / の可能性があります。ビルド プロセス
// で条件付きのコメントも含めてすべてのコメントが削除されるため、これは変更されていることに注意してください。 ' 'ipt defer="" src="//:" ="" onreadystatechange="if(this.readyState=='complete'){' dojo._scopeName '._loadInit();}">' ''
);
}
try{
document.namespaces.add("v","urn:schemas-microsoft-com:vml");
document.createStyleSheet().addRule("v\:*", "behavior:url(#default#VML)");
}catch(e){}
}
// 修正: dojo.unloaded には dojo スコープが必要なので、非関数ラッパーを使用します。
_handleNodeEvent("onbeforeunload", function() {
dojo.unloaded();
});
_handleNodeEvent("onunload", function() {
dojo.windowUnloaded();
});
})();
は次のように実行されます:
Opera または FF3 以降のバージョンの場合は、DOMContentLoaded< イベントを保護するために直接登録し、同時に window.onload イベントも登録します。
Air の場合は、widnow.onload イベントのみに登録されます。
IE の場合は、遅延遅延プロパティのスクリプトを面に書き込み、その onreadystatechange イベントに登録することによって実現されます。
Dojo の IE での実現方法では、iframe の問題が解決されておらず、FF2 以降には非常に奇妙なバグがあるため、FF3 以降のバージョンでは DOMContentLoaded イベントのみの使用が認められており、同時に構成も行われています。 -dojo.config.enableMozDomContentLoaded、FF でこの設定が true に設定されている場合、実行には DOMContentLoaded が使用されますが、これはプロトタイプと同様に十分に考慮されています。 🎜>五、YUI
复制代码
代码如下:
(function() {
/*! DOMReady: Dean Edwards/John Resig/Matthias Miller の著作に基づく */
// Internet Explorer: 遅延スクリプトの readState を使用します。
// これは、ドキュメントのreadyStateが
// 安全に操作できることを示唆する前に、
// DOMを操作するのに安全と思われる時点を分離します。
if (EU.isIE. ) {
//
// DOM の準備ができたら onAvailable/onContentReady アイテムを処理します。
YAHOO.util.Event.onDOMReady(
YAHOO.util.Event._tryPreloadAttach,
YAHOO. util.Event, true);
var n = document.createElement('p');
EU._dri = setInterval(function() {
try {
// doc の場合はエラーがスローされます準備ができていません
n.doScroll('left');
EU._dri = null
n = null;
} catch (ex) {
}
}, EU.POLL_INTERVAL);
// 現在、Safari のドキュメントの readState は、画像がロードされる前に
// ロード済み/完了に変わります。
} else if (EU.webkit && EU.webkit < 525) {
EU._dri = setInterval(function() {
var rs=document.readyState;
if ("loaded" == rs || "complete" == rs) {
clearInterval(EU._dri);
EU._dri = null;
EU._ready();
}
}、EU.POLL_INTERVAL);
// FireFox および Opera: これらのブラウザは、この
// 瞬間のイベントを提供します。最新の WebKit リリースでは、このイベントがサポートされるようになりました。
} else {
EU._simpleAdd(document, "DOMContentLoaded", EU._ready);
}
///////////////////////////////////////// //////////////////
EU._simpleAdd(window, "load", EU._load);
EU._simpleAdd(ウィンドウ, "アンロード", EU._unload);
EU._tryPreloadAttach();
})();
实现思路与Moontools一样
六、EXT
function initDocReady(){ var COMPLETE = "complete";
docReadyEvent = new Ext.util.Event();
if (Ext.isGecko || Ext.isOpera) {
DOC.addEventListener(DOMCONTENTLOADED, fireDocReady, false);
} else if (Ext.isIE){
DOC.write("");
DOC.getElementById(IEDEFERED).onreadystatechange = function(){
if(this.readyState == COMPLETE){
fireDocReady();
}
};
} else if (Ext.isWebKit){
docReadyProcId = setInterval(function(){
if(DOC.readyState == COMPLETE) {
fireDocReady();
}
}、10);
}
// 何があっても、ロード時に起動するようにしてください
E.on(WINDOW, "load", fireDocReady);
}
は、Dojo との一致を実現し、再説明はしません。 FF2 のバグを考慮して、DOMContentLoaded を使用するかどうかの設定を提供します。 🎜>
/*
* 注册浏览器の DOMContentLoaded イベント
* @param { Function } onready [必須]DOMContentLoaded イベント起動時に必要な実行対象関数
* @param { Object } config [任意] 構成 }; if( config )
for( var p in config)
this.conf[p] = config[p];
var isReady = false;
function doReady(){
if( isReady ) return;
//确保onready只执実行一回
isReady = true;
onready();
}
/*IE*/
if( Browser.ie ){
(function(){
if ( isReady ) return;
try {
document.documentElement .doScroll("left");
} catch( エラー ) {
setTimeout( argument.callee, 0 );
}
doReady(); ();
window.attachEvent('onload',doReady);
}
/*Webkit*/
else if (Browser.webkit && Browser.version < 525){
(function(){
if( isReady ) return;
if (/loaded|complete/.test(document.readyState))
doReady();
else
setTimeout( argument.callee, 0 )
});
window.addEventListener('load',doReady,false);
}
/*FF Opera 高版 webkit その他*/
else{
if( !Browser.ff || Browser.version != 2 || this.conf.enableMozDOMReady)
document.addEventListener( "DOMContentLoaded", function(){
document.removeEventListener( "DOMContentLoaded", argument.callee, false );
doReady();
}, false );
window.addEventListener('load',doReady,false);
}
}