ServiceWorker.onstatechange

Обработчик события, вызываемый при срабатывании события statechange; по сути, срабатывает при изменении ServiceWorker.state.

Синтаксис

ServiceWorker.onstatechange = function(statechangeevent) { ... }
ServiceWorker.addEventListener('statechange', function(statechangeevent) { ... } )

Примеры

Данный фрагмент кода из примера событий service worker (демо) возвращает состояние при каждом его изменении.

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