Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

ServiceWorkerContainer

Baseline
Weitgehend verfügbar
*

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit April 2018 browserübergreifend verfügbar.

* Einige Teile dieser Funktion werden möglicherweise unterschiedlich gut unterstützt.

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.

Die ServiceWorkerContainer-Schnittstelle der Service Worker API bietet ein Objekt, das den Service Worker als eine Gesamteinheit im Netzwerk-Ökosystem darstellt. Dazu gehören Funktionen zum Registrieren, Deregistrieren und Aktualisieren von Service Workern sowie der Zugriff auf den Status von Service Workern und deren Registrierungen.

Am wichtigsten ist, dass sie die Methode ServiceWorkerContainer.register() bereitstellt, die verwendet wird, um Service Worker zu registrieren, und die Eigenschaft ServiceWorkerContainer.controller, die verwendet wird, um festzustellen, ob die aktuelle Seite aktiv kontrolliert wird.

ServiceWorkerContainer-Objekte sind im Windowscope über Navigator.serviceWorker und in Worker-Skripten über WorkerNavigator.serviceWorker verfügbar (wenn unterstützt — siehe Browser-Kompatibilität).

EventTarget ServiceWorkerContainer

Instanzen-Eigenschaften

ServiceWorkerContainer.controller Schreibgeschützt

Ein ServiceWorker-Objekt, das den aktiven Service Worker repräsentiert, der die aktuelle Seite kontrolliert, oder null, wenn die Seite keinen aktiven oder aktivierenden Service Worker hat.

ServiceWorkerContainer.ready Schreibgeschützt

Gibt ein Promise zurück, das mit der ServiceWorkerRegistration aufgelöst wird, die mit der aktuellen Seite verknüpft ist, aber nur, wenn ein aktiver Service Worker vorhanden ist. Dies bietet einen Mechanismus zum Aufschieben der Codeausführung, bis ein Service Worker aktiv ist.

Instanzen-Methoden

ServiceWorkerContainer.getRegistration()

Ruft ein ServiceWorkerRegistration-Objekt ab, dessen Geltungsbereich mit der angegebenen Dokument-URL übereinstimmt. Die Methode gibt ein Promise zurück, das auf eine ServiceWorkerRegistration oder undefined aufgelöst wird.

ServiceWorkerContainer.getRegistrations()

Gibt alle ServiceWorkerRegistration-Objekte zurück, die mit einem ServiceWorkerContainer in einem Array verbunden sind. Die Methode gibt ein Promise zurück, das auf ein Array von ServiceWorkerRegistration aufgelöst wird.

ServiceWorkerContainer.register()

Erstellt oder aktualisiert eine ServiceWorkerRegistration für die angegebene scriptURL.

ServiceWorkerContainer.startMessages()

Startet explizit den Nachrichtenfluss, der von einem Service Worker an Seiten unter seiner Kontrolle gesendet wird (z.B. gesendet über Client.postMessage()). Dies kann verwendet werden, um auf gesendete Nachrichten früher zu reagieren, noch bevor der Inhalt dieser Seite vollständig geladen ist.

Ereignisse

controllerchange

Wird ausgelöst, wenn die mit dem Dokument verbundene ServiceWorkerRegistration einen neuen aktive Worker erhält.

message

Wird ausgelöst, wenn eingehende Nachrichten vom ServiceWorkerContainer-Objekt empfangen werden (z.B. über einen Aufruf von MessagePort.postMessage()).

messageerror

Wird ausgelöst, wenn eingehende Nachrichten vom ServiceWorkerContainer-Objekt nicht deserialisiert werden können (z.B. über einen Aufruf von MessagePort.postMessage()).

Beispiele

Das folgende Beispiel überprüft zunächst, ob der Browser Service Worker unterstützt. Wenn ja, registriert der Code den Service Worker und bestimmt, ob die Seite aktiv von diesem kontrolliert wird. Wenn nicht, wird der Benutzer aufgefordert, die Seite neu zu laden, damit der Service Worker die Kontrolle übernehmen kann. Der Code meldet auch Registrierungsfehler.

js
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

Spezifikation
Service Workers Nightly
# serviceworkercontainer-interface

Browser-Kompatibilität

Siehe auch