Start · Sprachen · JavaScript · Referenz · ServiceWorkerContainer.getRegistrations()

ServiceWorkerContainer.getRegistrations()

Methode

Liefert ein Promise mit einem Array aller <code>ServiceWorkerRegistration</code>-Objekte, die zum Ursprung (Origin) der aktuellen Seite gehören.

seit JavaScript Baseline: alle modernen Browser (Chrome 45+, Firef Kategorie: webapi

Signatur

ServiceWorkerContainer.prototype.getRegistrations()

Beschreibung

Die Methode getRegistrations() wird über navigator.serviceWorker aufgerufen und gibt alle Service-Worker-Registrierungen zurück, die für den Ursprung der aktuellen Seite existieren – unabhängig davon, welcher Scope sie abdecken. Damit unterscheidet sie sich von getRegistration(), das nur die eine Registrierung liefert, deren Scope zu einer bestimmten URL passt.

Typische Einsatzfälle sind Aufräumarbeiten (z. B. alle Service Worker abmelden, wenn eine App ihre Offline-Funktion entfernt), Diagnose (welche Worker mit welchen Scopes sind aktiv?) sowie das gezielte Aktualisieren aller Registrierungen per registration.update().

Das zurückgegebene Array kann leer sein, wenn keine Registrierung existiert. Jede ServiceWorkerRegistration enthält u. a. die Eigenschaften scope, installing, waiting und active, über die sich der Zustand des jeweiligen Workers prüfen lässt.

Rückgabewert

Typ
Promise<ServiceWorkerRegistration[]>
Beschreibung
Ein Promise, das mit einem (ggf. leeren) Array von ServiceWorkerRegistration-Objekten des aktuellen Ursprungs erfüllt wird.

Beispiele

Alle Registrierungen auflisten

const listRegistrations = async () => {
  if (!('serviceWorker' in navigator)) {
    console.log('Service Worker werden nicht unterstützt.');
    return;
  }
  const registrations = await navigator.serviceWorker.getRegistrations();
  console.log(`Anzahl: ${registrations.length}`);
  for (const reg of registrations) {
    const state = reg.active?.state ?? 'kein aktiver Worker';
    console.log(`${reg.scope} → ${state}`);
  }
};

listRegistrations();
Anzahl: 2 https://example.com/ → activated https://example.com/app/ → activated

Alle Service Worker abmelden (Kill-Switch)

const unregisterAll = async () => {
  const registrations = await navigator.serviceWorker.getRegistrations();
  const results = await Promise.all(
    registrations.map((reg) => reg.unregister())
  );
  console.log(`${results.filter(Boolean).length} Service Worker abgemeldet.`);

  // Optional: zugehörige Caches ebenfalls leeren
  const keys = await caches.keys();
  await Promise.all(keys.map((key) => caches.delete(key)));
};

unregisterAll();
2 Service Worker abgemeldet.

Alle Registrierungen auf Updates prüfen

const checkForUpdates = async () => {
  const registrations = await navigator.serviceWorker.getRegistrations();
  await Promise.all(registrations.map((reg) => reg.update()));

  const waiting = registrations.filter((reg) => reg.waiting);
  if (waiting.length > 0) {
    console.log('Neue Version verfügbar – bitte Seite neu laden.');
  }
};

// z. B. stündlich prüfen
setInterval(checkForUpdates, 60 * 60 * 1000);

// Wichtig · Fallstricke

  • Nur in sicheren Kontexten: navigator.serviceWorker ist nur über HTTPS bzw. localhost verfügbar. Auf HTTP-Seiten ist die Eigenschaft undefined – vorher immer auf 'serviceWorker' in navigator prüfen.
  • Nur der eigene Ursprung: Registrierungen anderer Origins sind niemals sichtbar.
  • unregister() wirkt nicht sofort: bereits kontrollierte Seiten bleiben bis zum nächsten Neuladen unter Kontrolle des Workers.
  • Im privaten Modus mancher Browser (z. B. Firefox) oder bei blockierten Cookies/Speicher kann das Promise mit einem SecurityError abgelehnt werden – Aufruf in try/catch einbetten.
  • Die Methode steht in Window-Kontexten zur Verfügung; innerhalb eines Service Workers selbst nutzt man stattdessen self.registration.