HTML5にDOMContentLoadedなんてのがあったんだね。
ノーマークだったが、Firefox 1.0から実装されてるみたい。
window.onload に似たような感じで、
document.addEventListener('DOMContentLoaded',function)
でdocumentに登録する。
loadだとたまに実行が遅れちゃう場合があるが、
画像や非同期のものも含めてJavaScript実行中だと遅れちゃうぽい?
DOMContentLoadedだとHTMLを読み込んでDOMが構築されたら実行される。
asyncやdeferで読み込まれるscriptの場合は既にloadedの可能性があるので、
if(document.readyState=='loading'){
document.addEventListener('DOMContentLoaded',$function,false);
}else{
$function();
}
みたいな感じでdocument.readyStateがloading以外の場合は即実行する必要がある。
document.readyStateは、ブラウザによっては違う場合もあるみたいだが、
HTMLの仕様だと"loading","
interactive
","
complete
"の3つがあり、
onloadの場合は
complete直前に実行される。
DOMContentLoadedの場合は
interactiveの直前に実行される。
loadingはHTMLの読み込み中で、
interactiveはHTMLは完了してるが画像等の外部ファイル読み込み中。