Esta página ha sido traducida del inglés por la comunidad. Aprende más y únete a la comunidad de MDN Web Docs.

View in English Always switch to English

ServiceWorker: evento statechange

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since abril de 2018.

Contexto seguro: Esta función está disponible solo en contextos seguros (HTTPS), en algunos o todos los navegadores que lo soportan.

Nota: Esta característica está disponible en Web Workers.

El evento statechange se dispara cada vez que cambia ServiceWorker.state.

Sintaxis

Usa el nombre del evento en métodos como addEventListener(), o establece una propiedad de manejador de eventos.

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

onstatechange = (event) => {};

Tipo de evento

Un Event genérico.

Ejemplos

Este fragmento de código proviene del ejemplo de eventos de registro de service worker (demo en vivo). El código escucha cualquier cambio en ServiceWorker.state y devuelve su valor.

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

Ten en cuenta que cuando se dispara statechange, las referencias del service worker pueden haber cambiado. Por ejemplo:

js
navigator.serviceWorker.register("/sw.js").then((swr) => {
  swr.installing.state = "installing";
  swr.installing.onstatechange = () => {
    swr.installing = null;
    // En este punto, swr.waiting O swr.active podrían ser true. Esto se debe a que el evento statechange
    // se encola, mientras tanto el worker subyacente puede haber pasado al estado waiting
    // y será activado inmediatamente si es posible.
  };
});

Especificaciones

Specification
Service Workers Nightly
# dom-serviceworker-onstatechange

Compatibilidad con navegadores