ServiceWorker.onstatechange
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2018.
一个 EventListener
联动的属性,其会被任何 stagechange 类型事件抛出时联动; 它也基本上能在任何时候ServiceWorker.state
改变时被抛出。
语法
ServiceWorker.onstatechange = function(statechangeevent) { ... } ServiceWorker.addEventListener('statechange', function(statechangeevent) { ... } )
示例
这段代码出自 service worker registration-events sample (live demo). 它会监听 ServiceWorker.state
的改变并返回它的值。
js
var 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", function (e) {
logState(e.target.state);
});
}
注意当statechange
抛出时,service worker 的引用可能已经改变。例如:
js
navigator.serviceWorker.register(..).then(function(swr) {
swr.installing.state == "installing"
swr.installing.onstatechange = function() {
swr.installing == null;
// At this point, swr.waiting OR swr.active might be true. This is because the statechange
// event gets queued, meanwhile the underlying worker may have gone into the waiting
// state and will be immediately activated if possible.
}
})
规范
Specification |
---|
Service Workers # dom-serviceworker-onstatechange |
浏览器兼容性
BCD tables only load in the browser