文件:readyState 屬性

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

Document.readyState 屬性描述了 document 的載入狀態。當此屬性的值發生變化時,會在 document 物件上觸發一個 readystatechange 事件。

文件的 readyState 可以是以下之一

loading

document 仍在載入中(即,HTML 解析器仍在工作)。

interactive

文件已解析,但子資源(如延遲指令碼和模組指令碼、影像、樣式表和框架)仍在載入。一旦進入此狀態,並且延遲指令碼和模組指令碼已執行,就會觸發 DOMContentLoaded 事件。

完成

文件和所有子資源已完成載入。該狀態表示 load 事件即將觸發。

示例

不同的就緒狀態

js
switch (document.readyState) {
  case "loading":
    // The document is loading.
    break;
  case "interactive": {
    // The document has finished loading and we can access DOM elements.
    // Sub-resources such as scripts, images, stylesheets and frames are still loading.
    const span = document.createElement("span");
    span.textContent = "A <span> element.";
    document.body.appendChild(span);
    break;
  }
  case "complete":
    // The page is fully loaded.
    console.log(
      `The first CSS rule is: ${document.styleSheets[0].cssRules[0].cssText}`,
    );
    break;
}

readystatechange 作為 DOMContentLoaded 事件的替代方案

js
// Alternative to DOMContentLoaded event
document.onreadystatechange = () => {
  if (document.readyState === "interactive") {
    initApplication();
  }
};

readystatechange 作為 load 事件的替代方案

js
// Alternative to load event
document.onreadystatechange = () => {
  if (document.readyState === "complete") {
    initApplication();
  }
};

readystatechange 作為事件監聽器,在 DOMContentLoaded 之前插入或修改 DOM

js
document.addEventListener("readystatechange", (event) => {
  if (event.target.readyState === "interactive") {
    initLoader();
  } else if (event.target.readyState === "complete") {
    initApp();
  }
});

規範

規範
HTML
# current-document-readiness

瀏覽器相容性

另見