Background Synchronization API

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.

Die Background Synchronization API ermöglicht es einer Webanwendung, Aufgaben zu verschieben, sodass diese in einem Service Worker ausgeführt werden können, sobald der Benutzer eine stabile Netzwerkverbindung hat.

Konzepte und Nutzung

Die Background Synchronization API erlaubt es Webanwendungen, die Serversynchronisationsarbeit an ihren Service Worker zu übertragen, um sie zu einem späteren Zeitpunkt auszuführen, wenn das Gerät offline ist. Anwendungsfälle könnten das Versenden von Anfragen im Hintergrund umfassen, falls diese nicht gesendet werden konnten, während die Anwendung benutzt wurde.

Zum Beispiel könnte eine E-Mail-Client-Anwendung es ihren Benutzern ermöglichen, Nachrichten zu verfassen und zu senden, auch wenn das Gerät keine Netzwerkverbindung hat. Das Frontend der Anwendung registriert einfach eine Synchronisierungsanfrage, und der Service Worker wird benachrichtigt, wenn das Netzwerk wieder verfügbar ist und führt die Synchronisierung durch.

Das SyncManager-Interface ist über ServiceWorkerRegistration.sync verfügbar. Ein einzigartiger Tag-Bezeichner wird gesetzt, um das Synchronisierungsereignis zu "benennen", auf das dann im ServiceWorker-Skript gehört werden kann. Sobald das Ereignis empfangen wird, können Sie jede verfügbare Funktionalität ausführen, wie zum Beispiel das Senden von Anfragen an den Server.

Da diese API auf Service Worker angewiesen ist, ist die durch diese API bereitgestellte Funktionalität nur in einem sicheren Kontext verfügbar.

Schnittstellen

SyncManager Experimentell

Registriert Aufgaben, die zu einem späteren Zeitpunkt mit Netzwerkanbindung in einem Service Worker ausgeführt werden sollen. Diese Aufgaben werden als Hintergrundsynchronisierungsanfragen bezeichnet.

SyncEvent Experimentell

Stellt ein Synchronisierungsereignis dar, das an den globalen Bereich eines ServiceWorker gesendet wird. Es bietet eine Möglichkeit, Aufgaben im Service Worker auszuführen, sobald das Gerät eine Netzwerkverbindung hat.

Erweiterungen zu anderen Schnittstellen

Die folgenden Ergänzungen zur Service Worker API bieten einen Einstiegspunkt für das Einrichten von Hintergrundsynchronisierungen.

ServiceWorkerRegistration.sync Nur lesbar

Gibt eine Referenz auf die SyncManager-Schnittstelle zurück, um Aufgaben zu registrieren, die ausgeführt werden, sobald das Gerät eine Netzwerkverbindung hat.

sync Ereignis

Ein Ereignis-Handler, der immer dann ausgelöst wird, wenn ein sync-Ereignis auftritt. Dies geschieht, sobald das Netzwerk verfügbar wird.

Beispiele

Die folgenden Beispiele zeigen, wie die Schnittstelle verwendet wird.

Anfordern einer Hintergrundsynchronisierung

Die folgende asynchrone Funktion registriert eine Hintergrundsynchronisierung aus einem Browsing-Kontext:

js
async function syncMessagesLater() {
  const registration = await navigator.serviceWorker.ready;
  try {
    await registration.sync.register("sync-messages");
  } catch {
    console.log("Background Sync could not be registered!");
  }
}

Überprüfen einer Hintergrundsynchronisierung nach Tag

Dieser Code überprüft, ob eine Hintergrundsynchronisierungsaufgabe mit einem bestimmten Tag registriert ist.

js
navigator.serviceWorker.ready.then((registration) => {
  registration.sync.getTags().then((tags) => {
    if (tags.includes("sync-messages")) {
      console.log("Messages sync already requested");
    }
  });
});

Lauschen auf eine Hintergrundsynchronisierung innerhalb eines Service Workers

Das folgende Beispiel zeigt, wie auf ein Hintergrundsynchronisierungsereignis im Service Worker reagiert werden kann.

js
self.addEventListener("sync", (event) => {
  if (event.tag === "sync-messages") {
    event.waitUntil(sendOutboxMessages());
  }
});

Spezifikationen

Specification
Web Background Synchronization

Browser-Kompatibilität

api.SyncManager

BCD tables only load in the browser

api.ServiceWorkerGlobalScope.sync_event

BCD tables only load in the browser

Siehe auch