Start · Sprachen · JavaScript · Referenz · CookieStoreManager.unsubscribe()

CookieStoreManager.unsubscribe()

Methode

Beendet zuvor mit <code>subscribe()</code> angelegte Cookie-Änderungs-Abonnements einer <code>ServiceWorkerRegistration</code>, sodass keine <code>cookiechange</code>-Ereignisse mehr eintreffen.

seit JavaScript Cookie Store API: Chromium 87+ (Chrome, Edge, Oper Kategorie: webapi

Signatur

CookieStoreManager.prototype.unsubscribe(subscriptions)

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

Typ
Promise<undefined>
Beschreibung
Ein Promise, das mit 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);
  }
});
Verbleibende Abonnements: 0

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');
  })());
});
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');
Überwachung von "cart" beendet

// 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 cookieStore teilweise, 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 url angelegt, musst du beim Abbestellen dieselbe URL angeben. Nicht vorhandene Abonnements werden ohne Fehlermeldung übergangen. Kontrolliere das Ergebnis deshalb bei Bedarf mit getSubscriptions().
  • Scope: Eine url außerhalb des Scopes der Registrierung führt zu einem TypeError.
  • Abonnements bleiben erhalten, bis der Service Worker neu gestartet wird. Beim Deregistrieren des Service Workers werden sie automatisch entfernt.