Document: DOMContentLoaded イベント
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
DOMContentLoaded
イベントは、HTML の文書が完全に読み込まれ構文解析され、すべての遅延スクリプト( および
)がダウンロードされ、実行されたときに発生します。画像、サブフレーム、非同期スクリプトの読み込みの完了は待ちません。
DOMContentLoaded
はスタイルシートの読み込みを待ちませんが、遅延スクリプトはスタイルシートの読み込みを待ちますし、DOMContentLoaded
イベントは遅延スクリプトの後にキューイングされます。また、遅延や非同期でないスクリプト( など)は、すでに解釈できるスタイルシートの読み込みを待ちます。
別なイベントである load
は、ページ全体が読み込まれたときにのみ使用します。 load
を DOMContentLoaded
がより適切である場面で使ってしまうことがよくある誤りです。
このイベントはキャンセル不可です。
構文
このイベント名を addEventListener()
などのメソッドで使用するか、イベントハンドラーのプロパティを設定するかしてください。
addEventListener("DOMContentLoaded", (event) => {});
イベント型
一般的な Event
です。
例
基本的な使用
document.addEventListener("DOMContentLoaded", (event) => {
console.log("DOM fully loaded and parsed");
});
DOMContentLoaded の遅延
読み込みが完了しているかどうかのチェック
DOMContentLoaded
はスクリプト実行の機会がある前に発生することがあるため、リスナーを追加する前にチェックするのが賢明です。
function doSomething() {
console.info("DOM loaded");
}
if (document.readyState === "loading") {
// Loading hasn't finished yet
document.addEventListener("DOMContentLoaded", doSomething);
} else {
// `DOMContentLoaded` has already fired
doSomething();
}
メモ:
ここでは競合条件はありません。 if
チェックと addEventListener()
呼び出しの間に文書が読み込まれることはあり得ません。JavaScript には run-to-completion という意味づけがあります。つまり、イベントループのある特定のタイミングで文書が読み込まれていたとしても、次のサイクルまで読み込まれることはなく、その時には doSomething
ハンドラーはすでに取り付けられており、発生します。
ライブサンプル
HTML
JavaScript
const log = document.querySelector(".event-log-contents");
const reload = document.querySelector("#reload");
reload.addEventListener("click", () => {
log.textContent = "";
setTimeout(() => {
window.location.reload(true);
}, 200);
});
window.addEventListener("load", (event) => {
log.textContent += "load\n";
});
document.addEventListener("readystatechange", (event) => {
log.textContent += `readystate: ${document.readyState}\n`;
});
document.addEventListener("DOMContentLoaded", (event) => {
log.textContent += "DOMContentLoaded\n";
});
結果
仕様書
Specification |
---|
HTML # stop-parsing |
ブラウザーの互換性
関連情報
- 関連イベント:
load
,readystatechange
,beforeunload
,unload