jqueryの$(document).ready()およびonloadのロード順序
2133 ワード
先日、firefoxでfirebugを有効にした場合、プロジェクトをデバッグしたところ、firefoxがクラッシュしたことがわかりました.デッドサイクルのためです.
理由:ページのframeのonloadメソッドはこう書かれています.onload=「onload();」,すなわち,メソッド名はキーワードonloadを用いているが,この場合,問題がある.ページのロードについては、次の文章を参考にしてください.
======================================================================
ソース:http://www.cnblogs.com/joycel/archive/2010/05/26/1744194.html
最近frameに埋め込まれたページを変更する際にjqueryを使用して効果を行い、ページ自体もonloadイベントにバインドされています.変更後、Firefoxのテストは正常に流暢で、IEの下で10数秒のjqueryの効果が現れて、黄花菜はすべて冷めました.
最初は自分のonloadロードの方法と衝突していると思っていました.ネット上で一般的な言い方は$(document)です.ready()はページDOMの解析が完了する後に実行され、onloadイベントはすべてのリソースが完了する準備が完了した後に実行される、すなわち$(document)である.ready()はonloadの前に実行され、特にページピクチャが大きい場合、この時間差が大きい可能性があります.しかし、私のこのページは明らかに画像が十数秒表示されていて、jqueryの効果はまだ出ていません.
onloadのロード方法を削除してみたが、結果は同じで、元のonloadイベントのバインドも$(document)に変更する必要はないようだ.ready()で書きます.それは何がFirefoxを正常にしてIEができるのですか?次にデバッグすると、IEの下で元のバインドされたonloadの方法が$(document)より先であることが分かった.ready()のコンテンツは実行するが、Firefoxは先に$(document)を実行する.ready()の内容は,元のonloadメソッドを実行する.これはネットの言い方と完全に一致していないようで、ほほほ、少し面白くて、ますます真相に近づいたようです.
jqueryのソースコードをひっくり返して$(document)を見てください.ready()はどのように実現されたのでしょうか.
その結果、IEは、frameにページが埋め込まれていない場合にのみFirefoxなどと同様に、先に$(document)を実行することが明らかになった.ready()の内容は,元のonloadメソッドを実行する.frameに埋め込まれたページについても、バインドはloadイベントで実行されるだけなので、元のonloadバインドの方法が実行されてから順番が回ってくるのは当然です.このページにはちょうどテスト環境の下でアクセスできないリソースがあり、その十数秒の遅延は拡大した時間差です.
理由:ページのframeのonloadメソッドはこう書かれています.onload=「onload();」,すなわち,メソッド名はキーワードonloadを用いているが,この場合,問題がある.ページのロードについては、次の文章を参考にしてください.
======================================================================
ソース:http://www.cnblogs.com/joycel/archive/2010/05/26/1744194.html
最近frameに埋め込まれたページを変更する際にjqueryを使用して効果を行い、ページ自体もonloadイベントにバインドされています.変更後、Firefoxのテストは正常に流暢で、IEの下で10数秒のjqueryの効果が現れて、黄花菜はすべて冷めました.
最初は自分のonloadロードの方法と衝突していると思っていました.ネット上で一般的な言い方は$(document)です.ready()はページDOMの解析が完了する後に実行され、onloadイベントはすべてのリソースが完了する準備が完了した後に実行される、すなわち$(document)である.ready()はonloadの前に実行され、特にページピクチャが大きい場合、この時間差が大きい可能性があります.しかし、私のこのページは明らかに画像が十数秒表示されていて、jqueryの効果はまだ出ていません.
onloadのロード方法を削除してみたが、結果は同じで、元のonloadイベントのバインドも$(document)に変更する必要はないようだ.ready()で書きます.それは何がFirefoxを正常にしてIEができるのですか?次にデバッグすると、IEの下で元のバインドされたonloadの方法が$(document)より先であることが分かった.ready()のコンテンツは実行するが、Firefoxは先に$(document)を実行する.ready()の内容は,元のonloadメソッドを実行する.これはネットの言い方と完全に一致していないようで、ほほほ、少し面白くて、ますます真相に近づいたようです.
jqueryのソースコードをひっくり返して$(document)を見てください.ready()はどのように実現されたのでしょうか.
if ( jQuery.browser.msie && window == top ) (function(){
if (jQuery.isReady) return;
try {
document.documentElement.doScroll("left");
} catch( error ) {
setTimeout( arguments.callee, 0 );
return;
}
// and execute any waiting functions
jQuery.ready();
})();
……
jQuery.event.add( window, "load", jQuery.ready );
その結果、IEは、frameにページが埋め込まれていない場合にのみFirefoxなどと同様に、先に$(document)を実行することが明らかになった.ready()の内容は,元のonloadメソッドを実行する.frameに埋め込まれたページについても、バインドはloadイベントで実行されるだけなので、元のonloadバインドの方法が実行されてから順番が回ってくるのは当然です.このページにはちょうどテスト環境の下でアクセスできないリソースがあり、その十数秒の遅延は拡大した時間差です.