ServiceWorker:state 属性
注意:此功能在Web Workers 中可用。
state
是 ServiceWorker
接口的只读属性,它返回一个字符串,表示 service worker 的当前状态。它可以是以下值之一:parsed
、installing
、installed
、activating
、activated
或 redundant
。
值
可以取以下值之一的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
的任何变化,并返回其值。
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 的浏览器中加载。