Start · Sprachen · JavaScript · Referenz · PeriodicSyncManager.getTags()

PeriodicSyncManager.getTags()

Methode

Gibt ein <code>Promise</code> zurück, das mit einem Array aus Strings erfüllt wird: den Tags aller aktuell registrierten periodischen Hintergrund-Synchronisationen.

seit JavaScript Chromium 80+ (experimentell, nicht Baseline) Kategorie: webapi

Signatur

PeriodicSyncManager.prototype.getTags()

Beschreibung

Die Methode getTags() der Schnittstelle PeriodicSyncManager liefert die Namen (Tags) aller periodischen Synchronisationen, die für die aktuelle Service-Worker-Registrierung angemeldet sind. Zugänglich ist der Manager über ServiceWorkerRegistration.periodicSync, sowohl im Fensterkontext als auch im Service Worker selbst.

Typische Einsatzfälle: Man prüft vor einem erneuten register()-Aufruf, ob ein Tag schon existiert. Man zeigt in den Einstellungen einer PWA an, welche Hintergrund-Aktualisierungen aktiv sind. Oder man räumt beim Abmelden eines Nutzers veraltete Registrierungen mit unregister() auf.

Die Methode liefert nur die Tag-Namen, nicht die bei der Registrierung angegebenen Optionen wie minInterval. Solche Daten muss die Anwendung bei Bedarf selbst speichern, etwa in IndexedDB.

Rückgabewert

Typ
Promise<string[]>
Beschreibung
Ein Promise, das mit einem Array aus Strings erfüllt wird: den Tags der registrierten periodischen Synchronisationen. Gibt es keine Registrierungen, ist das Array leer ([]).

Beispiele

Registrierte Tags auflisten

const listPeriodicSyncs = async () => {
  const registration = await navigator.serviceWorker.ready;
  if (!('periodicSync' in registration)) {
    console.log('Periodic Background Sync wird nicht unterstützt.');
    return [];
  }
  const tags = await registration.periodicSync.getTags();
  console.log('Aktive Tags:', tags);
  return tags;
};

listPeriodicSyncs();
Aktive Tags: ['news-update', 'content-sync']

Nur registrieren, wenn der Tag noch fehlt

const ensurePeriodicSync = async (tag, minInterval) => {
  const registration = await navigator.serviceWorker.ready;
  const status = await navigator.permissions.query({ name: 'periodic-background-sync' });
  if (status.state !== 'granted') {
    console.log('Keine Berechtigung für periodische Synchronisation.');
    return;
  }
  const tags = await registration.periodicSync.getTags();
  if (tags.includes(tag)) {
    console.log(`"${tag}" ist bereits registriert.`);
    return;
  }
  await registration.periodicSync.register(tag, { minInterval });
  console.log(`"${tag}" wurde registriert.`);
};

// Höchstens einmal pro Tag aktualisieren
ensurePeriodicSync('news-update', 24 * 60 * 60 * 1000);
"news-update" wurde registriert.

Alle periodischen Synchronisationen beim Abmelden entfernen

const clearPeriodicSyncs = async () => {
  const registration = await navigator.serviceWorker.ready;
  const tags = await registration.periodicSync.getTags();
  await Promise.all(tags.map((tag) => registration.periodicSync.unregister(tag)));
  console.log(`${tags.length} Registrierung(en) entfernt.`);
};

document.querySelector('#logout')?.addEventListener('click', clearPeriodicSyncs);
2 Registrierung(en) entfernt.

// Wichtig · Fallstricke

  • Browser-Kompatibilität: Periodic Background Sync ist experimentell und gehört nicht zur Baseline. Es wird nur von Chromium-Browsern unterstützt (Chrome, Edge, Opera), nicht von Firefox und Safari. Vor dem Aufruf deshalb immer mit 'periodicSync' in registration prüfen, ob die Funktion vorhanden ist.
  • Die Funktion steht nur in einem sicheren Kontext (HTTPS) mit aktivem Service Worker zur Verfügung. In Chrome muss die Web-App außerdem in der Regel installiert sein, sonst wird die Berechtigung periodic-background-sync nicht erteilt.
  • Fehlt die Berechtigung oder ist kein aktiver Service Worker vorhanden, kann das Promise mit einer DOMException abgelehnt werden (z. B. InvalidStateError). Den Aufruf daher in try…catch einschließen.
  • Ein Tag in der Liste bedeutet nicht, dass die Synchronisation im gewünschten Abstand tatsächlich läuft. Der Browser bestimmt die echte Häufigkeit selbst, etwa nach Nutzungsintensität der Seite, Akkustand und Netzwerk.