Start · Sprachen · JavaScript · Referenz · ServiceWorkerRegistration.installing

ServiceWorkerRegistration.installing

Eigenschaft

Schreibgeschützte Eigenschaft, die den Service Worker der Registrierung liefert, der sich gerade im Zustand <code>installing</code> befindet, sonst <code>null</code>.

seit JavaScript Baseline: alle modernen Browser (seit 2018) Kategorie: webapi

Signatur

ServiceWorkerRegistration.installing

Beschreibung

Die schreibgeschützte Eigenschaft installing eines ServiceWorkerRegistration-Objekts gibt den Service Worker zurück, der gerade installiert wird. Sein ServiceWorker.state ist dann "installing". Gibt es gerade keinen solchen Worker, ist der Wert null.

Eine Registrierung kann bis zu drei Worker gleichzeitig verwalten: installing (wird gerade installiert), waiting (fertig installiert, wartet auf Aktivierung) und active (steuert Seiten). installing brauchen Sie vor allem, um den Fortschritt eines Updates zu verfolgen. Dazu hängen Sie einen statechange-Listener an den installierenden Worker und reagieren, sobald er installed oder activated erreicht.

Üblicherweise lesen Sie die Eigenschaft direkt nach navigator.serviceWorker.register() oder im Handler des Events updatefound aus. Das Event wird genau dann ausgelöst, wenn installing einen neuen Worker erhält.

Rückgabewert

Typ
ServiceWorker | null
Beschreibung
Der ServiceWorker, der gerade installiert wird, oder null, wenn es keinen gibt.

Beispiele

Installationsstatus direkt nach der Registrierung prüfen

if ('serviceWorker' in navigator) {
  const registration = await navigator.serviceWorker.register('/sw.js');

  if (registration.installing) {
    console.log('Service Worker wird installiert');
  } else if (registration.waiting) {
    console.log('Service Worker ist installiert und wartet');
  } else if (registration.active) {
    console.log('Service Worker ist aktiv');
  }
}
Service Worker wird installiert

Update-Fortschritt über updatefound und statechange verfolgen

const registration = await navigator.serviceWorker.register('/sw.js');

registration.addEventListener('updatefound', () => {
  const newWorker = registration.installing;
  if (!newWorker) return;

  console.log('Neue Version gefunden, Status:', newWorker.state);

  newWorker.addEventListener('statechange', () => {
    console.log('Neuer Status:', newWorker.state);
    if (newWorker.state === 'installed' && navigator.serviceWorker.controller) {
      // Alte Version steuert die Seite noch – Hinweis anzeigen
      console.log('Update bereit – bitte Seite neu laden.');
    }
  });
});
Neue Version gefunden, Status: installing Neuer Status: installed Update bereit – bitte Seite neu laden. Neuer Status: activating Neuer Status: activated

Hilfsfunktion: auf die Aktivierung eines installierenden Workers warten

const waitForActivation = (registration) => new Promise((resolve, reject) => {
  const worker = registration.installing ?? registration.waiting;
  if (!worker) return resolve(registration.active);

  worker.addEventListener('statechange', () => {
    if (worker.state === 'activated') resolve(worker);
    if (worker.state === 'redundant') reject(new Error('Installation fehlgeschlagen'));
  });
});

const reg = await navigator.serviceWorker.register('/sw.js');
const active = await waitForActivation(reg);
console.log('Aktiv:', active.scriptURL);
Aktiv: https://example.com/sw.js

// Wichtig · Fallstricke

  • Kurzlebiger Wert: installing ist nur während der Installation belegt. Danach wandert der Worker nach waiting bzw. active, oder er wird bei einem Fehler redundant. Speichern Sie die Referenz sofort in einer Variablen, statt die Eigenschaft später erneut auszulesen.
  • Immer auf null prüfen: Auch im updatefound-Handler kann der Wert theoretisch schon wieder null sein, wenn die Installation sehr schnell fehlschlägt.
  • Service Worker gibt es nur in sicheren Kontexten (HTTPS oder localhost). In privaten Fenstern mancher Browser (z. B. älteres Firefox) fehlt navigator.serviceWorker ganz. Prüfen Sie deshalb vorher mit 'serviceWorker' in navigator.
  • Die Eigenschaft steht auch innerhalb des Service Workers über self.registration.installing zur Verfügung.
  • Die Browser-Unterstützung ist breit: Chrome 40+, Firefox 44+, Safari 11.1+ und Edge 17+.