ブラウザのキャッシュ (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();
}