Signatur
Beschreibung
Der Konstruktor ContentIndexEvent() erzeugt ein Ereignisobjekt der Content Index API. Diese API erlaubt es Progressive Web Apps, offline verfügbare Inhalte (Artikel, Videos, Podcasts) beim Browser zu registrieren, damit dieser sie z. B. auf der Seite „Neuer Tab“ oder im Download-Bereich anzeigen kann.
Löscht der Nutzer einen solchen Eintrag über die Oberfläche des Browsers, löst der Browser im Service Worker das Ereignis contentdelete aus. Das zugehörige Ereignisobjekt ist ein ContentIndexEvent, dessen Eigenschaft id den entfernten Eintrag bezeichnet. Die App kann dann die zugehörigen Daten aus dem Cache oder der IndexedDB entfernen.
In der Praxis erzeugt der Browser diese Ereignisse selbst. Den Konstruktor ruft man manuell vor allem in Unit-Tests oder zum Simulieren einer Löschung auf, um die Aufräumlogik des Service Workers ohne Umweg über die Browser-Oberfläche zu prüfen. ContentIndexEvent erbt von ExtendableEvent und ist nur im Service-Worker-Kontext verfügbar.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Name des Ereignisses, die Groß-/Kleinschreibung zählt. Der Browser verwendet stets "contentdelete". |
|
| $options Pflicht | Object | Wörterbuch mit Optionen. Zusätzlich zu den Optionen von ExtendableEvent (bubbles, cancelable, composed) gibt es das Pflichtfeld id (string): die ID des entfernten Inhalts, wie sie bei ContentIndex.add() vergeben wurde. |
Rückgabewert
ContentIndexEvent-Objekt, dessen id den Wert aus options.id hat.Beispiele
Ereignis erzeugen und id auslesen (im Service Worker)
// sw.js
const event = new ContentIndexEvent('contentdelete', {
id: 'artikel-42'
});
console.log(event.type);
console.log(event.id);
console.log(event instanceof ExtendableEvent);
Auf echte Löschungen reagieren und Cache aufräumen
// sw.js
self.addEventListener('contentdelete', (event) => {
// event ist ein ContentIndexEvent, das der Browser erzeugt hat
event.waitUntil((async () => {
const cache = await caches.open('offline-artikel');
await cache.delete(`/artikel/${event.id}.html`);
console.log(`Offline-Inhalt ${event.id} entfernt`);
})());
});
Löschung für einen Test simulieren
// sw.js – Aufräumlogik ohne Browser-Oberfläche testen
const geloeschteIds = [];
self.addEventListener('contentdelete', (event) => {
geloeschteIds.push(event.id);
});
const simulieren = (id) =>
self.dispatchEvent(new ContentIndexEvent('contentdelete', { id }));
simulieren('podcast-7');
simulieren('video-3');
console.log(geloeschteIds);
// Wichtig · Fallstricke
- Experimentelle API: Nur Chromium-Browser unterstützen sie, und im Wesentlichen nur auf Android. Firefox und Safari bieten sie nicht an. Prüfe die Verfügbarkeit mit
'ContentIndexEvent' in selfbzw.'index' in registration. - Den Konstruktor gibt es nur im Service Worker (
ServiceWorkerGlobalScope). Im Fenster-Kontext führt er zu einemReferenceError. options.idist Pflicht. Fehlt es, wirft der Konstruktor einenTypeError.- Ein selbst erzeugtes und per
dispatchEvent()ausgelöstes Ereignis hatisTrusted === false. Außerdem funktioniertwaitUntil()nur, solange der Browser das Ereignis noch verarbeitet. Bei synthetischen Ereignissen wirft der Aufruf außerhalb dieser Phase einenInvalidStateError. - Durch den synthetischen Aufruf verschwindet der Eintrag nicht aus dem Content Index. Dafür ist
registration.index.delete(id)nötig.