Start · Sprachen · JavaScript · Referenz · new ExtendableCookieChangeEvent()

new ExtendableCookieChangeEvent()

Methode

Erstellt ein neues <code>ExtendableCookieChangeEvent</code>-Objekt. Diesen Ereignistyp erhält ein Service Worker beim <code>cookiechange</code>-Ereignis.

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

Signatur

new ExtendableCookieChangeEvent(type, options)

Beschreibung

Der Konstruktor ExtendableCookieChangeEvent() erzeugt ein Ereignisobjekt der Cookie Store API. Im Normalfall erzeugt der Browser dieses Objekt selbst und übergibt es an den Service Worker, sobald sich ein abonniertes Cookie ändert (Ereignis cookiechange auf dem ServiceWorkerGlobalScope). Das Objekt erbt von ExtendableEvent. Deshalb steht waitUntil() zur Verfügung, und der Service Worker bleibt aktiv, bis die asynchrone Arbeit fertig ist.

Den Konstruktor selbst aufzurufen lohnt sich vor allem in Unit-Tests und beim Simulieren von Cookie-Änderungen. So lässt sich die Handler-Logik prüfen, ohne dass sich echte Cookies ändern müssen. Die Eigenschaften changed und deleted enthalten Listen von Cookie-Objekten, die jeweils name, value, domain, path, expires, secure, sameSite und partitioned enthalten können.

Damit der Browser echte cookiechange-Ereignisse im Service Worker auslöst, muss der Worker vorher über registration.cookies.subscribe() ein Abonnement anlegen. Im Fensterkontext gibt es dagegen CookieChangeEvent auf cookieStore (das Ereignis change).

Parameter

Name Typ Default Beschreibung
$type Pflicht string Name des Ereignisses. Für die übliche Verwendung ist das "cookiechange".
$options object {} Optionales Wörterbuch. Es enthält die Felder von EventInit (bubbles, cancelable, composed) sowie
  • changed: Array von Cookie-Objekten, die gesetzt oder geändert wurden (Standard [])
  • deleted: Array von Cookie-Objekten, die gelöscht wurden (Standard [])

Rückgabewert

Typ
ExtendableCookieChangeEvent
Beschreibung
Ein neues ExtendableCookieChangeEvent-Objekt mit den schreibgeschützten Eigenschaften changed und deleted. Beide sind eingefrorene Arrays.

Beispiele

Ereignis manuell erzeugen und auslesen

// Im Service Worker ausführen
const event = new ExtendableCookieChangeEvent('cookiechange', {
  changed: [{ name: 'session', value: 'abc123', path: '/' }],
  deleted: [{ name: 'tracking' }]
});

console.log(event.type);
console.log(event.changed[0].name, event.changed[0].value);
console.log(event.deleted.map((c) => c.name));
cookiechange session abc123 ["tracking"]

Cookie-Änderungen im Service Worker abonnieren und verarbeiten

// sw.js
self.addEventListener('activate', (event) => {
  event.waitUntil(
    self.registration.cookies.subscribe([{ name: 'session', url: '/' }])
  );
});

self.addEventListener('cookiechange', (event) => {
  event.waitUntil((async () => {
    for (const cookie of event.deleted) {
      if (cookie.name === 'session') {
        // Sitzung beendet: gecachte private Daten entfernen
        await caches.delete('user-data');
        console.log('Sitzung abgelaufen, Cache geleert');
      }
    }
  })());
});
Sitzung abgelaufen, Cache geleert

Handler-Logik mit einem simulierten Ereignis testen

// sw.js – Handler als eigene Funktion, damit er testbar ist
const handleCookieChange = (event) => {
  const names = event.changed.map((c) => c.name);
  return names.includes('theme') ? 'Theme aktualisiert' : 'keine Aktion';
};

self.addEventListener('cookiechange', (e) => console.log(handleCookieChange(e)));

// Test: Ereignis erzeugen und auslösen
const fake = new ExtendableCookieChangeEvent('cookiechange', {
  changed: [{ name: 'theme', value: 'dark' }]
});
self.dispatchEvent(fake);
Theme aktualisiert

// Wichtig · Fallstricke

  • Browser-Unterstützung: Bisher nur in Chromium-Browsern (ab Chrome/Edge 87). Firefox und Safari unterstützen ExtendableCookieChangeEvent und cookiechange im Service Worker nicht. Vor der Nutzung mit 'cookieStore' in self oder typeof ExtendableCookieChangeEvent !== 'undefined' prüfen, ob die API vorhanden ist.
  • Der Konstruktor gibt es nur im Service-Worker-Kontext. Im Fenster verwendet man stattdessen CookieChangeEvent.
  • Wer das Ereignis manuell erzeugt und mit dispatchEvent() auslöst, sollte bei waitUntil() vorsichtig sein. Außerhalb der Ereignisverarbeitung durch den Browser wirft der Aufruf einen InvalidStateError.
  • Die API funktioniert nur in einem sicheren Kontext (HTTPS). Cookies mit HttpOnly sind nicht sichtbar.
  • Ohne vorheriges cookies.subscribe() löst der Browser keine echten cookiechange-Ereignisse aus.