Signatur
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
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();
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();
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.serviceWorkerist nur über HTTPS bzw.localhostverfügbar. Auf HTTP-Seiten ist die Eigenschaftundefined– vorher immer auf'serviceWorker' in navigatorprü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
SecurityErrorabgelehnt werden – Aufruf intry/catcheinbetten. - Die Methode steht in Window-Kontexten zur Verfügung; innerhalb eines Service Workers selbst nutzt man stattdessen
self.registration.