Document: DOMContentLoaded event

Событие DOMContentLoaded запускается когда первоначальный HTML документ будет полностью загружен и разобран, без ожидания полной загрузки таблиц стилей, изображений и фреймов.

Всплытие да
Отменяемый Да (хотя указано как простое событие, которое не может быть отменено)
Интерфейс Event
Свойство обработчика событий нет

Существует другое событие — load, которое следует использовать для определения, что страница полностью загружена. Распространённой ошибкой является использование load вместо DOMContentLoaded.

Примеры

Основное применение

js
document.addEventListener("DOMContentLoaded", (event) => {
  console.log("DOM полностью загружен и разобран");
});

Отложенный DOMContentLoaded

html
<script>
  document.addEventListener("DOMContentLoaded", (event) => {
    console.log("DOM полностью загружен и разобран");
  });

  for (let i = 0; i < 1000000000; i++) {} // Этот синхронный скрипт откладывает разбор DOM,
  // так что событие DOMContentLoaded будет запущено позже.
</script>

Проверка того, завершена ли загрузка

DOMContentLoaded может сработать до того, как ваш скрипт будет запущен, поэтому разумно это проверить, перед добавлением обработчика.

js
function doSomething() {
  console.info("DOM загружен");
}

if (document.readyState === "loading") {
  // Загрузка ещё не закончилась
  document.addEventListener("DOMContentLoaded", doSomething);
} else {
  // `DOMContentLoaded` Уже сработал
  doSomething();
}

Живые примеры

HTML

html
<div class="controls">
  <button id="reload" type="button">Reload</button>
</div>

<div class="event-log">
  <label>Event log:</label>
  <textarea readonly class="event-log-contents" rows="8" cols="30"></textarea>
</div>

JS

js
const log = document.querySelector(".event-log-contents");
const reload = document.querySelector("#reload");

reload.addEventListener("click", () => {
  log.textContent = "";
  window.setTimeout(() => {
    window.location.reload(true);
  }, 200);
});

window.addEventListener("load", (event) => {
  log.textContent = log.textContent + "load\n";
});

document.addEventListener("readystatechange", (event) => {
  log.textContent = log.textContent + `readystate: ${document.readyState}\n`;
});

document.addEventListener("DOMContentLoaded", (event) => {
  log.textContent = log.textContent + `DOMContentLoaded\n`;
});

Result

Спецификации

Specification
HTML Standard
# stop-parsing

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также