onModuleLoadが呼ばれるタイミング
GWTでEntryPoint#onModuleLoadが呼ばれるタイミングが気になって調べてみました。
onModuleLoad内で、document.bodyの操作ができることから、HTMLが読み込まれた後だということはわかるのですが、onloadイベントが上書きされないので、どうやっているのか。。。
GWTのHTMLに読み込まれるxxx.nocache.jsというファイルを見ると(xxxは作成したEntryPointのクラス名)31行目付近に
if(k.addEventListener){k.addEventListener('DOMContentLoaded',function(){x();A();},false);}
var B=setInterval(function(){if(/loaded|complete/.test(k.readyState)){x();A();}},50);
と書かれています。
IEとFireFoxでは動きが違うようです。
前のほうがFireFox、後のほうがIEの挙動です。
FireFoxはDOMContentLoadedのイベントで処理していました。
IEのほうはkがdocumentなのでdocument.readStateのステータスで判断しています。
この違いだと、IEはHTML内のコンテンツをすべて読み込んだ後、FireFoxはHTMLのみが読み込まれたタイミングで実行されます。
ためしに、大きな画像ファイルを読み込むようにしたサンプルを作ったところ、
IEでは画像を読み込んだ後
FireFoxでは画像を読み込む前
にonModuleLoadが呼ばれました。
ちなみにOperaもFireFoxと同じ挙動です。
Posted in GWT |
