ServiceWorker:state 属性

安全上下文:此功能仅在安全上下文(HTTPS)中可用,在部分或所有支持的浏览器中可用。

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

stateServiceWorker 接口的只读属性,它返回一个字符串,表示 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

浏览器兼容性

BCD 表格仅在启用了 JavaScript 的浏览器中加载。