Signatur
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
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();
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);
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);
// 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 registrationprü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-syncnicht erteilt. - Fehlt die Berechtigung oder ist kein aktiver Service Worker vorhanden, kann das Promise mit einer
DOMExceptionabgelehnt werden (z. B.InvalidStateError). Den Aufruf daher intry…catcheinschließ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.