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

new ContentIndexEvent()

Methode

Erzeugt ein neues <code>ContentIndexEvent</code>-Objekt mit dem angegebenen Typ und der <code>id</code> des aus dem Content Index entfernten Inhalts.

seit JavaScript Experimentell: Chromium-basierte Browser (Chrome/E Kategorie: webapi

Signatur

new ContentIndexEvent(type, options)

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

Typ
ContentIndexEvent
Beschreibung
Ein neues 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);
contentdelete artikel-42 true

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`);
  })());
});
Offline-Inhalt artikel-42 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);
[ 'podcast-7', 'video-3' ]

// 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 self bzw. 'index' in registration.
  • Den Konstruktor gibt es nur im Service Worker (ServiceWorkerGlobalScope). Im Fenster-Kontext führt er zu einem ReferenceError.
  • options.id ist Pflicht. Fehlt es, wirft der Konstruktor einen TypeError.
  • Ein selbst erzeugtes und per dispatchEvent() ausgelöstes Ereignis hat isTrusted === false. Außerdem funktioniert waitUntil() nur, solange der Browser das Ereignis noch verarbeitet. Bei synthetischen Ereignissen wirft der Aufruf außerhalb dieser Phase einen InvalidStateError.
  • Durch den synthetischen Aufruf verschwindet der Eintrag nicht aus dem Content Index. Dafür ist registration.index.delete(id) nötig.