ブラウザのキャッシュ (Back-Forward Cache) が働いているとき、loadイベントは発生しません。Using Firefox 1.5 caching | MDN
このイベントは、次の要素などでサポートされます。onload Event | W3Schools
Windowオブジェクトのonloadイベントハンドラに、JavaScriptコードを登録します。
window.onload = function() { };
これはHTMLで、body要素のonload属性に設定することと同義です。
前述の方法では先にonloadイベントが登録されていると、それを上書きして消してしまいます。よって複数のイベントが登録されることが想定されるならば、次のようにイベントを追加すべきです。
if( window.addEventListener ) { window.addEventListener( 'load', Func, false ); } else if( window.attachEvent ) { window.attachEvent( 'onload', Func ); } else { window.onload = Func; }
なお、これはクロスブラウザに対応したイベントの実装によるものです。
Documentオブジェクトのbodyプロパティの属性として、
document.body.onload = function() { };
のように記述すると、ブラウザによって挙動が異なることがあります。よって前述のように、windowオブジェクトを用いるべきです。
スタイルシートや画像、それにフレームの読み込み完了を待つ必要がないならば、DOMContentLoadedイベントを使用します。
document.addEventListener( 'DOMContentLoaded', function()
{
//
}, false );
このイベントとloadイベントとの違いは、Internet Explorer Test Driveで確認できます。
ところでページ読み込み後にドキュメントを変更する場合、その変更の完了はsetTimeout()で0秒後に関数を呼び出すことで実現できます。
DOMContentLoadedが実装されていない環境 (IE9より前) 向けには、doScroll()で代用する方法があります。これはドキュメントの読み込み前にdoScroll()を呼び出すと例外が発生することを応用した方法で、例外を発生しなくなるまでdoScroll()をくり返し呼びます。IEContentLoaded - An alternative for DOMContenloaded on Internet Explorer
( function() { try { document.documentElement.doScroll( 'left' ); } catch( e ) { // 例外が発生しなくなるまで、再帰的に呼び出す setTimeout( arguments.callee, 10 ); return; } // ここで読み込み完了後の処理を行う。 } )();
function Init() { // 読み込み完了後の処理 } if( document.addEventListener ) { document.addEventListener( 'DOMContentLoaded', Init, false ); } else if( document.attachEvent ) { // DOMContentLoadedがサポートされない環境 (IE9より前) 向け var CheckReadyState = function() { if( document.readyState == 'complete' ) { document.detachEvent( 'onreadystatechange', CheckReadyState ); Init(); } } document.attachEvent( 'onreadystatechange', CheckReadyState ); ( function() { try { document.documentElement.doScroll( 'left' ); } catch( e ) { setTimeout( arguments.callee, 10 ); return; } document.detachEvent( 'onreadystatechange', CheckReadyState ); Init(); } )(); } else { // attachEvent()すらもサポートされない環境 (?) 向け Init(); }