jQuery.ready()とloadイベント
以前、jQuery.ready()とloadイベントって具体的にはタイミングがどう変わるんだろね?という話になってちょっと調べ……たのも以前の話、なのですが……。
ぐぐってみると ページ読み込み時に実行するjavascriptについてのTips | Tips Note というページが見つかって、そのページでは
■処理を実行するタイミングの違い
onloadイベントとjQueryのreadyメソッドは
処理を実行するタイミングが異なります。jQueryのready()メソッド
DOMツリーの構築が完了した時点で処理を実行する。
onloadイベント
DOMツリーの構築だけでなく、画像などの関連データの読み込みが完了しないと処理を実行しない。
と書かれています。
では、実際に試してみましょう。まずベースとなるHTML+JavaScriptを以下のように準備します。
<!DOCTYPE HTML> <html> <head> <meta charset="UTF-8" /> <title>jQuery.ready()とloadイベント@UCWD-Studio.</title> <script src="https://ucwd.jp/wp-includes/js/jquery/jquery.js"></script> <script> jQuery( function () { jQuery(window).load( function () { jQuery("#report").append('<p>load: ' + now() +'</p>'); }); jQuery("#report").append('<p>ready: ' + now() + '</p>'); }); function now () { var dt = new Date(); return dt.toLocaleString(); } </script> </head> <body> <h1>Event Test</h1> <div id="just_a_minute"><iframe src="./just_a_minute.php"></iframe></div> <div id="report"></div> </body> </html>
で、iframe内に表示するファイルをPHPで以下のように準備します。
<?php sleep(10); header('Content-type: text/plain; charset=utf-8'); echo 'iframe loaded.'; ?>
ポイントは sleep() を使ってわざとレスポンスを遅らせてる点です。すると、$.ready() の方はさっと表示されるのに対し、loadイベントの方は iframe 内が読み込まれるまで表示されないのが実際に確認できます。
サンプルを用意してるので実際に確認してみてください。