Start · Sprachen · JavaScript · Referenz · ExtendableCookieChangeEvent.deleted

ExtendableCookieChangeEvent.deleted

Eigenschaft

Schreibgeschütztes Array der Cookies, die mit dem ausgelösten <code>cookiechange</code>-Ereignis im Service Worker gelöscht wurden oder abgelaufen sind.

seit JavaScript Cookie Store API – Chromium 87+, Firefox/Safari: e Kategorie: webapi

Signatur

ExtendableCookieChangeEvent.deleted

Beschreibung

Die Eigenschaft deleted des Interfaces ExtendableCookieChangeEvent enthält ein Array mit allen Cookies, die durch die Änderung entfernt wurden, zu der dieses Ereignis gehört. Das Ereignis wird im Service Worker als cookiechange ausgelöst. Voraussetzung ist, dass der Worker sich vorher über registration.cookies.subscribe() für bestimmte Cookies angemeldet hat.

Jeder Eintrag ist ein schlichtes Objekt mit mindestens den Feldern name und value. Bei gelöschten Cookies ist value in der Regel undefined bzw. leer. Weitere Attribute wie domain, path, expires, secure, sameSite oder partitioned sind je nach Browser vorhanden. Als „gelöscht“ zählen auch Cookies, die abgelaufen sind oder mit einem Ablaufdatum in der Vergangenheit überschrieben wurden.

Typische Einsatzfälle sind das Aufräumen im Hintergrund, sobald ein Sitzungs-Cookie wegfällt. Dazu gehört etwa, zwischengespeicherte Nutzerdaten aus dem Cache Storage zu löschen, offene Tabs über den Abmeldevorgang zu informieren oder eine Synchronisierung zu beenden. Weil das Ereignis von ExtendableEvent erbt, kann man mit event.waitUntil() dafür sorgen, dass der Service Worker aktiv bleibt, bis diese asynchronen Arbeiten abgeschlossen sind.

Das Gegenstück ist die Eigenschaft changed. Sie enthält neu gesetzte oder geänderte Cookies. Ein Cookie, das überschrieben wird, taucht in changed auf, nicht in deleted.

Rückgabewert

Typ
ReadonlyArray<CookieListItem>
Beschreibung
Ein eingefrorenes Array von Cookie-Objekten ({ name, value, domain, path, expires, secure, sameSite, partitioned }), die gelöscht wurden. Wenn kein Cookie gelöscht wurde, ist es leer.

Beispiele

Gelöschte Cookies im Service Worker protokollieren

// sw.js
self.addEventListener('activate', (event) => {
  // Für Änderungen am Cookie "session" anmelden
  event.waitUntil(
    self.registration.cookies.subscribe([{ name: 'session', url: '/' }])
  );
});

self.addEventListener('cookiechange', (event) => {
  for (const cookie of event.deleted) {
    console.log(`Cookie gelöscht: ${cookie.name}`);
  }
});
Cookie gelöscht: session

Beim Abmelden den Cache leeren und Tabs benachrichtigen

// sw.js
self.addEventListener('cookiechange', (event) => {
  const sessionGone = event.deleted.some((c) => c.name === 'session');
  if (!sessionGone) return;

  event.waitUntil((async () => {
    await caches.delete('user-data');
    const clientList = await self.clients.matchAll({ type: 'window' });
    clientList.forEach((client) => client.postMessage({ type: 'logout' }));
  })());
});

Änderungen und Löschungen gemeinsam auswerten

// sw.js
self.addEventListener('cookiechange', (event) => {
  const changed = event.changed.map((c) => `${c.name}=${c.value}`);
  const deleted = event.deleted.map((c) => c.name);
  console.log({ changed, deleted });
});

// Auf der Seite ausgelöst, z. B. durch:
// await cookieStore.delete('theme');
{ changed: [], deleted: ['theme'] }

// Wichtig · Fallstricke

  • Nur im Service Worker: ExtendableCookieChangeEvent gibt es ausschließlich im ServiceWorkerGlobalScope. Im Fenster verwendet man stattdessen CookieChangeEvent über cookieStore.addEventListener('change', …). Auch dort gibt es eine Eigenschaft deleted.
  • Anmeldung ist Pflicht: Ohne vorheriges registration.cookies.subscribe() wird kein cookiechange ausgelöst. Die Anmeldung gilt für den jeweiligen Scope und bleibt über Neustarts des Workers hinweg bestehen.
  • Browser-Kompatibilität: Die Cookie Store API wird vollständig nur in Chromium-Browsern unterstützt (Chrome und Edge ab Version 87). In Firefox und Safari fehlt die Unterstützung im Service Worker ganz oder teilweise. Vor der Nutzung sollte man per Feature-Erkennung prüfen, z. B. mit 'cookies' in self.registration.
  • Nur sichere Kontexte: Die API funktioniert nur über HTTPS (oder localhost). HttpOnly-Cookies sind für die Cookie Store API nicht sichtbar. Deren Löschung erscheint daher nicht in deleted.
  • Das Array ist schreibgeschützt und eingefroren. Wer die Liste verändern will, legt vorher eine Kopie an, z. B. mit [...event.deleted].
  • Bei gelöschten Cookies sollte man sich nicht auf value verlassen, denn das Feld ist meist undefined.