Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
ExtendableEvent
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2018.
Hinweis: Diese Funktion ist nur inService Workers verfügbar.
DasExtendableEvent-Interface verlängert die Lebensdauer derinstall- undactivate-Ereignisse, die im globalen Geltungsbereich als Teil des Service-Worker-Lebenszyklus ausgelöst werden. Dies stellt sicher, dass funktionale Ereignisse (wieFetchEvent) erst ausgelöst werden, nachdem Datenbankschemata aktualisiert und veraltete Cache-Einträge gelöscht wurden.
WennwaitUntil() außerhalb desExtendableEvent-Handlers aufgerufen wird, sollte der Browser einenInvalidStateError auslösen; beachten Sie auch, dass mehrmaliges Aufrufen diese stapelt und die daraus resultierenden Versprechen zur Liste derextend lifetime promises hinzugefügt werden.
Dieses Interface erbt vomEvent-Interface.
Hinweis:Dieses Interface ist nur verfügbar, wenn der globale Geltungsbereich einServiceWorkerGlobalScope ist. Es ist nicht verfügbar, wenn es sich um einWindow oder den Geltungsbereich einer anderen Art von Worker handelt.
In diesem Artikel
Konstruktor
ExtendableEvent()Erstellt ein neues
ExtendableEvent-Objekt.
Instanz-Eigenschaften
Implementiert keine spezifischen Eigenschaften, erbt jedoch Eigenschaften von seinem Elternteil,Event.
Instanz-Methoden
Erbt Methoden von seinem Elternteil,Event.
ExtendableEvent.waitUntil()Verlängert die Lebensdauer des Ereignisses. Es soll im
installEreignishandler für deninstalling-Worker und imactivateEreignishandler für denactive-Worker aufgerufen werden.
Beispiele
Dieser Codeausschnitt stammt aus demService-Worker-Prefetch-Beispiel (sieheprefetch example live). Der Code ruftExtendableEvent.waitUntil() inoninstall auf und verzögert die Behandlung desServiceWorkerRegistration.installing-Workers als installiert, bis das übergebene Versprechen erfolgreich aufgelöst wird. Das Versprechen wird aufgelöst, wenn alle Ressourcen abgerufen und zwischengespeichert wurden oder wenn eine Ausnahme auftritt.
Der Codeausschnitt zeigt auch eine bewährte Methode zur Versionierung von Caches, die vom Service-Worker verwendet werden. Obwohl in diesem Beispiel nur ein Cache vorhanden ist, kann derselbe Ansatz für mehrere Caches verwendet werden. Es wird eine Kurzbezeichnung für einen Cache auf einen spezifischen, versionierten Cachenamen abgebildet.
Hinweis:In Chrome sind Protokollierungsanweisungen über die "Inspect"-Schnittstelle für den relevanten Service-Worker zugänglich, der über chrome://serviceworker-internals aufgerufen wird.
const CACHE_VERSION = 1;const CURRENT_CACHES = { prefetch: `prefetch-cache-v${CACHE_VERSION}`,};self.addEventListener("install", (event) => { const urlsToPrefetch = [ "./static/pre_fetched.txt", "./static/pre_fetched.html", "https://www.chromium.org/_/rsrc/1302286216006/config/customLogo.gif", ]; console.log( "Handling install event. Resources to pre-fetch:", urlsToPrefetch, ); event.waitUntil( caches .open(CURRENT_CACHES["prefetch"]) .then((cache) => cache.addAll( urlsToPrefetch.map( (urlToPrefetch) => new Request(urlToPrefetch, { mode: "no-cors" }), ), ), ) .then(() => { console.log("All resources have been fetched and cached."); }) .catch((error) => { console.error("Pre-fetching failed:", error); }), );});Hinweis:Beim Abrufen von Ressourcen ist es sehr wichtig,{mode: 'no-cors'} zu verwenden, wenn die Möglichkeit besteht, dass die Ressourcen von einem Server bereitgestellt werden, derCORS nicht unterstützt. In diesem Beispiel unterstütztwww.chromium.org kein CORS.
Spezifikationen
| Specification |
|---|
| Service Workers Nightly> # extendableevent-interface> |