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

new InstallEvent()

Methode

Der Konstruktor <code>InstallEvent()</code> erzeugt im Service-Worker-Kontext ein neues <code>InstallEvent</code>-Objekt, wie es der Browser beim <code>install</code>-Ereignis auslöst.

seit JavaScript Experimentell: Chromium-Browser (Chrome/Edge); in Kategorie: webapi

Signatur

new InstallEvent(type, options)

Beschreibung

Der Konstruktor new InstallEvent() erzeugt ein Ereignisobjekt vom Typ InstallEvent. Die Schnittstelle erweitert ExtendableEvent und steht für das install-Ereignis eines Service Workers. Sie erbt daher die Methode waitUntil(). Außerdem bringt sie (in Chromium) die Methode addRoutes() der Service Worker Static Routing API mit.

In der Praxis rufst du den Konstruktor fast nie selbst auf. Der Browser erzeugt das Ereignis automatisch, sobald ein neuer Service Worker installiert wird, und übergibt es an deinen install-Handler. Selbst anlegen lohnt sich vor allem für Unit-Tests und Polyfills oder um einen Installations-Handler gezielt noch einmal auszuführen.

Der Konstruktor ist nur im globalen Gültigkeitsbereich eines Service Workers (ServiceWorkerGlobalScope) verfügbar, nicht im window-Kontext. Ein selbst erzeugtes Ereignis löst keine echte Installation aus. Es ist ein gewöhnliches Ereignisobjekt, das du per dispatchEvent() an eigene Listener schicken kannst.

Parameter

Name Typ Default Beschreibung
$type Pflicht string Name des Ereignisses, üblicherweise "install". Groß- und Kleinschreibung wird beachtet.
$options object {} Optionales Objekt vom Typ ExtendableEventInit. Es erbt von EventInit die Felder bubbles (Standard false), cancelable (Standard false) und composed (Standard false). Eigene Felder hat InstallEvent nicht.

Rückgabewert

Typ
InstallEvent
Beschreibung
Ein neues InstallEvent-Objekt mit dem angegebenen Typ und den übergebenen Optionen.

Beispiele

InstallEvent im Service Worker erzeugen

// sw.js – läuft im ServiceWorkerGlobalScope
const event = new InstallEvent('install', { cancelable: false });

console.log(event.type);
console.log(event instanceof ExtendableEvent);
console.log(typeof event.waitUntil);
install true function

Typische Nutzung: Dateien beim install-Ereignis vorab cachen

// sw.js
const CACHE_NAME = 'app-v1';
const ASSETS = ['/', '/index.html', '/styles.css', '/app.js'];

self.addEventListener('install', (event) => {
  // Der Browser übergibt hier ein InstallEvent
  console.log(event.constructor.name);
  event.waitUntil(
    (async () => {
      const cache = await caches.open(CACHE_NAME);
      await cache.addAll(ASSETS);
      await self.skipWaiting();
    })()
  );
});
InstallEvent

Installations-Handler im Test manuell auslösen

// sw.js – Handler als eigene Funktion, damit er testbar ist
const onInstall = (event) => {
  event.waitUntil(Promise.resolve().then(() => console.log('Installationslogik ausgeführt')));
};

self.addEventListener('install', onInstall);

// Test: selbst erzeugtes Ereignis an die eigenen Listener schicken
const fakeInstall = new InstallEvent('install');
self.dispatchEvent(fakeInstall);
Installationslogik ausgeführt

Statisches Routing mit addRoutes() (Chromium)

// sw.js
self.addEventListener('install', (event) => {
  if ('addRoutes' in event) {
    event.addRoutes({
      condition: { urlPattern: new URLPattern({ pathname: '/api/*' }) },
      source: 'network'
    });
  }
});

// Wichtig · Fallstricke

  • Experimentell: InstallEvent ist in der Service-Worker-Spezifikation als eigene Schnittstelle nicht in allen Browsern umgesetzt. Firefox und Safari liefern beim install-Ereignis ein normales ExtendableEvent, dort ist InstallEvent nicht definiert. Prüfe vorher mit typeof InstallEvent !== 'undefined', ob die Schnittstelle vorhanden ist. Für browserübergreifenden Code verwende new ExtendableEvent('install').
  • Nur im Service Worker: Im window- oder Web-Worker-Kontext wirft der Aufruf einen ReferenceError.
  • Keine echte Installation: Ein selbst erzeugtes Ereignis stößt keinen Lebenszyklus-Wechsel an. waitUntil() verlängert hier nichts im Browser. Außerhalb des Dispatch-Vorgangs kann es sogar einen InvalidStateError werfen.
  • isTrusted ist false: Selbst erzeugte Ereignisse lassen sich von echten, vom Browser ausgelösten Ereignissen unterscheiden.
  • addRoutes() gibt es bisher nur in Chromium (ab etwa Version 123). Du darfst die Methode nur während des install-Ereignisses aufrufen.