ServiceWorker:state 屬性

Baseline 已廣泛支援

此功能已成熟,可跨多種裝置和瀏覽器版本工作。它自 ⁨2018 年 4 月⁩ 起已在所有瀏覽器中可用。

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

注意:此功能在 Web Workers 中可用。

ServiceWorker 介面的只讀屬性 state 返回一個字串,表示 service worker 的當前狀態。它可以是以下值之一:parsedinstallinginstalledactivatingactivatedredundant

一個 String,可以取以下值之一

"parsed"

service worker 下載並確認可執行後的初始狀態。service worker 永遠不會更新到此狀態,因此它永遠不會是 statechange 事件的值。

"installing"

此狀態下的 service worker 被視為正在安裝的 worker。在此狀態下,可以在 install 事件處理程式內部呼叫 ExtendableEvent.waitUntil() 來延長正在安裝的 worker 的生命週期,直到傳入的 Promise 成功解析。這主要用於確保 service worker 在所有核心快取填充完畢之前不會處於活動狀態。

"installed"

此狀態下的 service worker 被視為一個等待中的 worker。

"activating"

此狀態下的 service worker 被視為一個活動的 worker。在此狀態下,可以在 onactivate 事件處理程式內部呼叫 ExtendableEvent.waitUntil() 來延長活動的 worker 的生命週期,直到傳入的 Promise 成功解析。在狀態變為 activated 之前,不會分派任何功能性事件。

"activated"

此狀態下的 service worker 被視為一個已準備好處理功能性事件的活動 worker。

"redundant"

一個新的 service worker 正在替換當前的 service worker,或者當前的 service worker 由於安裝失敗而被丟棄。

示例

此程式碼片段來自 service worker registration-events 示例線上演示)。該程式碼監聽 ServiceWorker.state 的任何變化並返回其值。

js
let serviceWorker;
if (registration.installing) {
  serviceWorker = registration.installing;
  document.querySelector("#kind").textContent = "installing";
} else if (registration.waiting) {
  serviceWorker = registration.waiting;
  document.querySelector("#kind").textContent = "waiting";
} else if (registration.active) {
  serviceWorker = registration.active;
  document.querySelector("#kind").textContent = "active";
}

if (serviceWorker) {
  logState(serviceWorker.state);
  serviceWorker.addEventListener("statechange", (e) => {
    logState(e.target.state);
  });
}

規範

規範
Service Workers
# service-worker-state

瀏覽器相容性