ServiceWorker.state

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.

La propriété en lecture seule state, rattachée à l'interface ServiceWorker, renvoie une chaîne de caractères indiquant l'état courant du service worker. Sa valeur peut être :

  • "installing",
  • "installed",
  • "activating",
  • "activated",
  • ou "redundant".

Valeur

Une chaîne de caractères (String) qui peut valoir :

"installing"

Le service worker est en cours d'installation. Pendant cet état, ExtendableEvent.waitUntil() peut être appelé au sein du gestionnaire d'évènement install pour étendre la durée de vie du worker en installation jusqu'à ce que la promesse passée soit réussie. Cet état sert principalement à s'assurer que le service worker n'est pas actif tant que tous les caches n'ont pas été remplis.

"installed"

Dans cet état, le service worker est en attente.

"activating"

Dans cet état, le service worker est considéré comme actif. Pendant cet état, on peut appeler ExtendableEvent.waitUntil() dans le gestionnaire d'évènements onactivate afin d'étendre la durée de vie du worker jusqu'à ce que la promesse passée soit réussie. Aucun évènement fonctionnel n'est diffusé tant que l'état n'est pas "activated".

"activated"

Dans cet état, le service worker est considéré comme actif et comme pouvant gérer les évènements fonctionnels.

"redundant"

Un nouveau service worker qui remplace le service worker courant, ou le service worker courant qui est écarté en raison d'un échec d'installation.

Exemples

Le fragment de code qui suit est tiré de l'exemple registration-events (voir la démo correspondante). Le code surveille tout changement de ServiceWorker.state et renvoie la valeur.

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", function (e) {
    logState(e.target.state);
  });
}

Spécifications

Specification
Service Workers
# service-worker-state

Compatibilité des navigateurs

BCD tables only load in the browser