Signatur
Beschreibung
Mit unsubscribe() entfernst du Abonnements aus der Liste der Cookie-Änderungs-Abonnements einer Service-Worker-Registrierung. Diese Liste erreichst du über registration.cookies, also die CookieStoreManager-Instanz der jeweiligen ServiceWorkerRegistration. Wenn ein Abonnement entfernt ist, bekommt der Service Worker für die betroffenen Cookies kein cookiechange-Ereignis mehr.
Die Methode erwartet ein Array von Abonnement-Beschreibungen mit derselben Struktur wie bei subscribe(). Ein Abonnement wird nur dann entfernt, wenn Name und URL genau übereinstimmen. Beschreibungen, zu denen es kein passendes Abonnement gibt, werden stillschweigend übergangen. Dabei wird kein Fehler ausgelöst.
Typische Einsatzfälle sind: ein Feature wird abgeschaltet (z. B. nach dem Logout soll das Sitzungs-Cookie nicht mehr überwacht werden), Abonnements werden in einem activate-Handler bei einem Versions-Update aufgeräumt, oder das Überwachen soll sich nach Nutzereinstellungen richten. Mit getSubscriptions() kannst du vorher nachsehen, welche Abonnements aktuell bestehen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $subscriptions Pflicht | Array<{ name: string, url?: string }> | Liste der Abonnements, die entfernt werden sollen. Jedes Objekt enthält name (Name des Cookies) und optional url. Ohne url wird der Scope der Service-Worker-Registrierung verwendet. Die URL muss innerhalb dieses Scopes liegen. |
Rückgabewert
undefined erfüllt wird, sobald die Abonnements entfernt sind. Es wird mit einem TypeError abgelehnt, wenn eine URL außerhalb des Registrierungs-Scopes liegt oder die Eingabe ungültig ist.Beispiele
Einzelnes Abonnement im Service Worker entfernen
// sw.js
self.addEventListener('message', async (event) => {
if (event.data === 'logout') {
await self.registration.cookies.unsubscribe([
{ name: 'session_id' }
]);
const subs = await self.registration.cookies.getSubscriptions();
console.log('Verbleibende Abonnements:', subs.length);
}
});
Alle bestehenden Abonnements beim Aktivieren aufräumen
// sw.js
self.addEventListener('activate', (event) => {
event.waitUntil((async () => {
const manager = self.registration.cookies;
const subs = await manager.getSubscriptions();
if (subs.length > 0) {
// getSubscriptions() liefert bereits {name, url} – direkt weiterreichen
await manager.unsubscribe(subs);
}
// Nur die gewünschten Cookies neu abonnieren
await manager.subscribe([{ name: 'theme' }]);
console.log('Abonnements neu gesetzt');
})());
});
Aus der Seite heraus abbestellen (mit Feature-Erkennung)
// main.js (Fensterkontext)
const stopWatchingCookie = async (name) => {
const registration = await navigator.serviceWorker.ready;
if (!('cookies' in registration)) {
console.warn('CookieStoreManager wird nicht unterstützt');
return;
}
await registration.cookies.unsubscribe([
{ name, url: registration.scope }
]);
console.log(`Überwachung von "${name}" beendet`);
};
stopWatchingCookie('cart');
// Wichtig · Fallstricke
- Browser-Kompatibilität: Die Methode ist praktisch nur in Chromium-Browsern (ab Version 87) zuverlässig verfügbar. Firefox und Safari unterstützen
cookieStoreteilweise, Service-Worker-Abonnements aber nicht oder nur eingeschränkt. Prüfe deshalb immer vorher mit'cookies' in registration. - Sicherer Kontext: Die Methode ist nur über HTTPS (oder
localhost) verfügbar. - Genaue Übereinstimmung: Ein Abonnement wird nur entfernt, wenn Name und URL übereinstimmen. Wurde es mit einer bestimmten
urlangelegt, musst du beim Abbestellen dieselbe URL angeben. Nicht vorhandene Abonnements werden ohne Fehlermeldung übergangen. Kontrolliere das Ergebnis deshalb bei Bedarf mitgetSubscriptions(). - Scope: Eine
urlaußerhalb des Scopes der Registrierung führt zu einemTypeError. - Abonnements bleiben erhalten, bis der Service Worker neu gestartet wird. Beim Deregistrieren des Service Workers werden sie automatisch entfernt.