Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

ServiceWorker: statechange-Ereignis

Baseline
Weitgehend verfügbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit April 2018 browserübergreifend verfügbar.

Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.

Hinweis: Diese Funktion ist in Web Workers verfügbar.

Das statechange-Ereignis wird jedes Mal ausgelöst, wenn sich ServiceWorker.state ändert.

Syntax

Verwenden Sie den Ereignisnamen in addEventListener():

js
addEventListener("statechange", (event) => { })

Alternativ können Sie die Event-Handler-Eigenschaft der Schnittstelle verwenden:

js
onstatechange = (event) => { }

Ereignistyp

Ein generisches Event.

Beispiele

Dieser Codeausschnitt stammt aus dem Beispiel für Service-Worker-Registrierungsereignisse (Live-Demo). Der Code überwacht Änderungen an ServiceWorker.state und gibt dessen Wert zurück.

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);
  });
}

Beachten Sie, dass sich die Referenzen auf den Service Worker geändert haben können, wenn statechange ausgelöst wird. Zum Beispiel:

js
navigator.serviceWorker.register("/sw.js").then((swr) => {
  swr.installing.state = "installing";
  swr.installing.onstatechange = () => {
    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.
  };
});

Spezifikationen

Spezifikation
Service Workers Nightly
# dom-serviceworker-onstatechange

Browser-Kompatibilität