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 内が読み込まれるまで表示されないのが実際に確認できます。
サンプルを用意してるので実際に確認してみてください。