ServiceWorkerContainer
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Hinweis: Dieses Feature ist verfügbar in Web Workers.
Das ServiceWorkerContainer
-Interface der Service Worker API bietet ein Objekt, das den Service Worker als eine Gesamteinheit im Netzwerk-Ökosystem darstellt, einschließlich Funktionen zum Registrieren, Deregistrieren und Aktualisieren von Service Workern sowie zum Zugreifen auf den Status von Service Workern und deren Registrierungen.
Am wichtigsten ist, dass es die Methode ServiceWorkerContainer.register()
zum Registrieren von Service Workern und die Eigenschaft ServiceWorkerContainer.controller
verwendet, um festzustellen, ob die aktuelle Seite aktiv gesteuert wird.
Service Worker können derzeit nur im Fensterbereich in einigen oder allen Browsern registriert werden, da das ServiceWorkerContainer
-Objekt nicht für DedicatedWorkerGlobalScope
und SharedWorkerGlobalScope
zugänglich ist. Überprüfen Sie die Browser-Kompatibilität für Informationen.
Instanz-Eigenschaften
ServiceWorkerContainer.controller
Nur lesbar-
Gibt ein
ServiceWorker
-Objekt zurück, wenn dessen Zustandactivating
oderactivated
ist (dasselbe Objekt, das vonServiceWorkerRegistration.active
zurückgegeben wird). Diese Eigenschaft gibtnull
während einer Zwangsaktualisierungsanfrage (Shift + Aktualisierung) oder wenn kein aktiver Worker vorhanden ist, zurück. ServiceWorkerContainer.ready
Nur lesbar-
Bietet eine Möglichkeit, die Ausführung von Code zu verzögern, bis ein Service Worker aktiv ist. Es gibt ein
Promise
zurück, das niemals ablehnt und unbegrenzt wartet, bis der der aktuellen Seite zugeordneteServiceWorkerRegistration
einenServiceWorkerRegistration.active
Worker hat. Sobald diese Bedingung erfüllt ist, wird es mit demServiceWorkerRegistration
aufgelöst.
Instanz-Methoden
ServiceWorkerContainer.getRegistration()
-
Holt ein
ServiceWorkerRegistration
-Objekt, dessen Gültigkeitsbereich zur angegebenen Dokument-URL passt. Die Methode gibt einPromise
zurück, das auf einServiceWorkerRegistration
oderundefined
aufgelöst wird. ServiceWorkerContainer.getRegistrations()
-
Gibt alle
ServiceWorkerRegistration
-Objekte zurück, die einemServiceWorkerContainer
in einem Array zugeordnet sind. Die Methode gibt einPromise
zurück, das zu einem Array vonServiceWorkerRegistration
aufgelöst wird. ServiceWorkerContainer.register()
-
Erstellt oder aktualisiert eine
ServiceWorkerRegistration
für die angegebenescriptURL
. ServiceWorkerContainer.startMessages()
-
startet ausdrücklich den Fluss von Nachrichten, die von einem Service Worker an Seiten unter seiner Kontrolle gesendet werden (z.B. gesendet über
Client.postMessage()
). Dies kann verwendet werden, um auf gesendete Nachrichten früher zu reagieren, noch bevor der Inhalt der Seite vollständig geladen ist.
Ereignisse
controllerchange
-
Tritt auf, wenn die dem Dokument zugeordnete
ServiceWorkerRegistration
einen neuenactive
Worker erhält. error
Veraltet Nicht standardisiert-
Wird immer dann ausgelöst, wenn ein Fehler in den zugehörigen Service Workern auftritt.
message
-
Tritt auf, wenn eingehende Nachrichten vom
ServiceWorkerContainer
-Objekt empfangen werden (z.B. über einenMessagePort.postMessage()
-Aufruf). messageerror
-
Tritt auf, wenn eingehende Nachrichten nicht vom
ServiceWorkerContainer
-Objekt deserialisiert werden können (z.B. über einenMessagePort.postMessage()
-Aufruf).
Beispiele
Das folgende Beispiel prüft zunächst, ob der Browser Service Worker unterstützt. Wenn ja, registriert der Code den Service Worker und stellt fest, ob die Seite aktiv vom Service Worker gesteuert wird. Wenn nicht, wird der Benutzer aufgefordert, die Seite neu zu laden, damit der Service Worker die Kontrolle übernehmen kann. Der Code meldet auch alle Registrierungsfehler.
if ("serviceWorker" in navigator) {
// Register a service worker hosted at the root of the
// site using the default scope.
navigator.serviceWorker
.register("/sw.js")
.then((registration) => {
console.log("Service worker registration succeeded:", registration);
// At this point, you can optionally do something
// with registration. See https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration
})
.catch((error) => {
console.error(`Service worker registration failed: ${error}`);
});
// Independent of the registration, let's also display
// information about whether the current page is controlled
// by an existing service worker, and when that
// controller changes.
// First, do a one-off check if there's currently a
// service worker in control.
if (navigator.serviceWorker.controller) {
console.log(
"This page is currently controlled by:",
navigator.serviceWorker.controller,
);
}
// Then, register a handler to detect when a new or
// updated service worker takes control.
navigator.serviceWorker.oncontrollerchange = () => {
console.log(
"This page is now controlled by",
navigator.serviceWorker.controller,
);
};
} else {
console.log("Service workers are not supported.");
}
Spezifikationen
Specification |
---|
Service Workers # serviceworkercontainer-interface |
Browser-Kompatibilität
BCD tables only load in the browser