ServiceWorker
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.
* Some parts of this feature may have varying levels of support.
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Das ServiceWorker
-Interface der Service Worker API bietet eine Referenz auf einen Service Worker. Mehrere Browsing-Kontexte (z.B. Seiten, Worker etc.) können mit demselben Service-Worker verbunden sein, jeder durch ein einzigartiges ServiceWorker
-Objekt.
Ein ServiceWorker
-Objekt ist über eine Reihe von Eigenschaften verfügbar:
ServiceWorkerRegistration.active
ServiceWorkerGlobalScope.serviceWorker
ServiceWorkerContainer.controller
— wenn sich der Service Worker im Zustandactivating
oderactivated
befindetServiceWorkerRegistration.installing
— wenn sich der Service Worker im Zustandinstalling
befindetServiceWorkerRegistration.waiting
— wenn sich der Service Worker im Zustandinstalled
befindet
Die Eigenschaft ServiceWorker.state
und das statechange
-Ereignis können verwendet werden, um Änderungen im Lebenszyklus-Zustand des dem Objekt zugeordneten Service Workers zu überprüfen und zu beobachten. Bezogene Lebenszyklus-Ereignisse wie install
und activate
werden direkt am Service Worker ausgelöst.
Service Worker erlauben den statischen Import von ECMAScript-Modulen, wenn unterstützt, mittels import
.
Dynamischer Import ist durch die Spezifikation nicht erlaubt — ein Aufruf von import()
wirft einen Fehler.
Service Worker können nur im Fenster-Kontext in einigen oder allen Browsern registriert werden, da das ServiceWorker
-Objekt nicht im DedicatedWorkerGlobalScope
und SharedWorkerGlobalScope
verfügbar ist. Überprüfen Sie die Browser-Kompatibilität für weitere Informationen.
Instanz-Eigenschaften
Das ServiceWorker
-Interface erbt Eigenschaften von seinem Eltern-Interface, EventTarget
.
ServiceWorker.scriptURL
Schreibgeschützt-
Gibt die serialisierte Skript-URL des
ServiceWorker
zurück, die als Teil derServiceWorkerRegistration
definiert ist. Die URL muss dieselbe Herkunft haben wie das Dokument, das denServiceWorker
registriert. ServiceWorker.state
Schreibgeschützt-
Gibt den Zustand des Service Workers zurück. Es gibt einen der folgenden Werte zurück:
parsed
,installing
,installed
,activating
,activated
, oderredundant
.
Instanz-Methoden
Das ServiceWorker
-Interface erbt Methoden von seinem Eltern-Interface, EventTarget
.
ServiceWorker.postMessage()
-
Sendet eine Nachricht — bestehend aus einem beliebigen strukturiert klonbaren JavaScript-Objekt — an den Service Worker. Die Nachricht wird dem Service Worker über ein
message
-Ereignis in dessen globalem Geltungsbereich übermittelt.
Ereignisse
statechange
-
Wird ausgelöst, wenn sich
ServiceWorker.state
ändert. error
-
Wird ausgelöst, wenn ein Fehler im
ServiceWorker
-Objekt auftritt.
Beispiele
Dieser Codeausschnitt stammt aus dem Beispiel für die Registrierung von Service Worker-Ereignissen (Live-Demo). Der Code hört auf jede Änderung im ServiceWorker.state
und gibt dessen Wert zurück.
if ("serviceWorker" in navigator) {
navigator.serviceWorker
.register("service-worker.js", {
scope: "./",
})
.then((registration) => {
let serviceWorker;
if (registration.installing) {
serviceWorker = registration.installing;
document.querySelector("#kind").textContent = "installing";
} else if (registration.waiting) {
serviceWorker = registration.waiting;
document.querySelector("#kind").textContent = "waiting";
} else if (registration.active) {
serviceWorker = registration.active;
document.querySelector("#kind").textContent = "active";
}
if (serviceWorker) {
// logState(serviceWorker.state);
serviceWorker.addEventListener("statechange", (e) => {
// logState(e.target.state);
});
}
})
.catch((error) => {
// Something went wrong during registration. The service-worker.js file
// might be unavailable or contain a syntax error.
});
} else {
// The current browser doesn't support service workers.
// Perhaps it is too old or we are not in a Secure Context.
}
Spezifikationen
Specification |
---|
Service Workers # serviceworker-interface |