Movatterモバイル変換


[0]ホーム

URL:


  1. 開発者向けのウェブ技術
  2. Web API
  3. Document
  4. DOMContentLoaded

このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。

View in EnglishAlways switch to English

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 ⁨2015年7月⁩.

DOMContentLoaded イベントは、HTML の文書が完全に読み込まれ構文解析され、すべての遅延スクリプト(<script defer src="…"> および<script type="module">)がダウンロードされ、実行されたときに発生します。画像、サブフレーム、非同期スクリプトの読み込みの完了は待ちません。

DOMContentLoaded はスタイルシートの読み込みを待ちませんが、遅延スクリプトはスタイルシートの読み込みを待ちますし、DOMContentLoaded イベントは遅延スクリプトの後にキューイングされます。また、遅延や非同期でないスクリプト(<script> など)は、すでに解釈できるスタイルシートの読み込みを待ちます。

別なイベントであるload は、ページ全体が読み込まれたときにのみ使用します。loadDOMContentLoaded がより適切である場面で使ってしまうことがよくある誤りです。

このイベントはキャンセル不可です。

構文

このイベント名をaddEventListener() などのメソッドで使用するか、イベントハンドラーのプロパティを設定するかしてください。

js
addEventListener("DOMContentLoaded", (event) => {});

イベント型

一般的なEvent です。

基本的な使用

js
document.addEventListener("DOMContentLoaded", (event) => {  console.log("DOM fully loaded and parsed");});

DOMContentLoaded の遅延

html
<script>  document.addEventListener("DOMContentLoaded", (event) => {    console.log("DOM は完全に読み込まれ解釈されました");  });  for (let i = 0; i < 1_000_000_000; i++);  // この同期スクリプトは DOM の構文解析を遅らせるので、  // DOMContentLoaded イベントはその後で起動することになります。</script>

読み込みが完了しているかどうかのチェック

DOMContentLoaded はスクリプト実行の機会がある前に発生することがあるため、リスナーを追加する前にチェックするのが賢明です。

js
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

html
<div>  <button type="button">再読み込み</button></div><div>  <label for="eventLog">イベントログ:</label>  <textarea    readonly       rows="8"    cols="30"   ></textarea></div>
body {  display: grid;  grid-template-areas: "control log";}.controls {  grid-area: control;  display: flex;  align-items: center;  justify-content: center;}.event-log {  grid-area: log;}.event-log-contents {  resize: none;}label,button {  display: block;}#reload {  height: 2rem;}

JavaScript

js
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

ブラウザーの互換性

関連情報

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp