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

CookieStoreManager.getSubscriptions()

Methode

Liefert ein Promise mit der Liste aller Cookie-Änderungsabonnements, die für die aktuelle <code>ServiceWorkerRegistration</code> registriert sind.

seit JavaScript Chrome/Edge 87+, Firefox 140+, Safari 18.4+ (nur i Kategorie: webapi

Signatur

CookieStoreManager.prototype.getSubscriptions()

Beschreibung

Die Methode getSubscriptions() des Interfaces CookieStoreManager gibt alle Cookie-Änderungsabonnements zurück, die zuvor mit subscribe() für eine ServiceWorkerRegistration angelegt wurden. Den CookieStoreManager erreichst du über registration.cookies, sowohl im Fenster-Kontext als auch im Service Worker selbst.

Jedes Abonnement wird als einfaches Objekt mit den Eigenschaften name (Cookie-Name, optional) und url (absoluter URL-Geltungsbereich) geliefert. Gibt es noch keine Abonnements, erhältst du ein leeres Array.

Typische Anwendungsfälle:

  • Vor dem Anlegen prüfen, ob ein Abonnement schon existiert, damit du nicht doppelt abonnierst.
  • Debuggen und Protokollieren, auf welche Cookies der Service Worker mit cookiechange-Events reagiert.
  • Alle bestehenden Abonnements aufräumen, z. B. beim Abmelden, indem du das Ergebnis direkt an unsubscribe() weitergibst.

Rückgabewert

Typ
Promise<Array<{name?: string, url: string}>>
Beschreibung
Ein Promise, das mit einem Array von Abonnement-Objekten erfüllt wird. Jedes Objekt enthält name (Name des Cookies, fehlt bei Abonnements ohne Namensfilter) und url (absolute URL, die den Geltungsbereich angibt). Ohne Abonnements ist das Array leer.

Beispiele

Abonnements im Service Worker auflisten

// sw.js
self.addEventListener('activate', (event) => {
  event.waitUntil((async () => {
    const subs = await self.registration.cookies.getSubscriptions();
    console.log(`Anzahl Abonnements: ${subs.length}`);
    for (const { name, url } of subs) {
      console.log(`Cookie "${name ?? '(alle)'}" für ${url}`);
    }
  })());
});
Anzahl Abonnements: 1 Cookie "session" für https://example.com/

Nur abonnieren, wenn noch nicht vorhanden

// sw.js
const ensureSubscription = async (name) => {
  const manager = self.registration.cookies;
  const url = self.registration.scope;
  const subs = await manager.getSubscriptions();
  const exists = subs.some((s) => s.name === name && s.url === url);
  if (!exists) {
    await manager.subscribe([{ name, url }]);
    console.log(`Abonnement für "${name}" angelegt`);
  } else {
    console.log(`"${name}" ist bereits abonniert`);
  }
};

self.addEventListener('activate', (event) => {
  event.waitUntil(ensureSubscription('session'));
});

self.addEventListener('cookiechange', (event) => {
  for (const c of event.changed) console.log('Geändert:', c.name, c.value);
  for (const c of event.deleted) console.log('Gelöscht:', c.name);
});
Abonnement für "session" angelegt

Alle Abonnements aus der Seite heraus entfernen

// main.js (Fenster-Kontext)
const clearCookieSubscriptions = async () => {
  const registration = await navigator.serviceWorker.ready;
  if (!registration.cookies) {
    console.warn('CookieStoreManager wird nicht unterstützt');
    return;
  }
  const subs = await registration.cookies.getSubscriptions();
  if (subs.length > 0) {
    await registration.cookies.unsubscribe(subs);
  }
  const rest = await registration.cookies.getSubscriptions();
  console.log(`Verbleibende Abonnements: ${rest.length}`);
};

clearCookieSubscriptions();
Verbleibende Abonnements: 0

// Wichtig · Fallstricke

  • Browser-Unterstützung: Die Cookie Store API wird noch nicht überall unterstützt: Chromium seit Version 87, Firefox und Safari erst seit Kurzem. Prüfe vorher mit 'cookies' in registration bzw. if (registration.cookies).
  • Nur in sicheren Kontexten (HTTPS oder localhost) verfügbar und nur mit einer aktiven ServiceWorkerRegistration.
  • Abonnements sind an die Registrierung gebunden: Wird der Service Worker abgemeldet (unregister()), verschwinden auch alle Abonnements.
  • Die zurückgegebene url ist immer absolut aufgelöst, auch wenn beim subscribe() eine relative URL angegeben wurde. Vergleiche daher mit absoluten URLs, z. B. registration.scope.
  • Die Reihenfolge der Einträge ist nicht garantiert. Verlass dich nicht auf den Index.
  • HttpOnly-Cookies lösen zwar cookiechange-Events aus, ihre Werte sind aber für die Cookie Store API nicht sichtbar.