Signatur
Beschreibung
Die schreibgeschützte Eigenschaft updateViaCache einer ServiceWorkerRegistration gibt an, wann der Browser den HTTP-Cache benutzt, wenn er prüft, ob es eine neue Version des Service-Worker-Skripts gibt. Das betrifft sowohl das Hauptskript als auch Dateien, die per importScripts() geladen werden.
Den Wert legt man beim Registrieren über die Option updateViaCache von navigator.serviceWorker.register() fest. Möglich sind drei Werte:
"imports"(Standard): Das Hauptskript wird immer am HTTP-Cache vorbei geladen. Für importierte Skripte darf der Cache genutzt werden."all": Der HTTP-Cache darf für das Hauptskript und für alle importierten Skripte genutzt werden. Das entspricht dem früheren Verhalten der Browser."none": Der HTTP-Cache wird weder für das Hauptskript noch für importierte Skripte genutzt.
Die Eigenschaft ist nützlich für die Fehlersuche und die Überwachung: Man kann damit prüfen, ob eine bestehende Registrierung die gewünschte Update-Strategie verwendet. Das ist vor allem wichtig, wenn Service-Worker-Dateien mit langen Cache-Control-Headern ausgeliefert werden. Unabhängig vom HTTP-Cache umgeht der Browser den Cache für den Update-Check nach spätestens 24 Stunden.
Rückgabewert
"imports".Beispiele
Aktuelle Update-Strategie auslesen
if ('serviceWorker' in navigator) {
const registration = await navigator.serviceWorker.register('/sw.js');
console.log(`updateViaCache: ${registration.updateViaCache}`);
}
HTTP-Cache für Updates vollständig umgehen
const registration = await navigator.serviceWorker.register('/sw.js', {
scope: '/',
updateViaCache: 'none'
});
console.log(registration.updateViaCache);
Bestehende Registrierungen prüfen und korrigieren
const registrations = await navigator.serviceWorker.getRegistrations();
for (const reg of registrations) {
if (reg.updateViaCache !== 'none') {
console.warn(`Scope ${reg.scope} nutzt '${reg.updateViaCache}' – Registrierung wird erneuert`);
// Erneutes register() mit gleicher URL und gleichem Scope aktualisiert die Option
await navigator.serviceWorker.register('/sw.js', {
scope: reg.scope,
updateViaCache: 'none'
});
}
}
Manuellen Update-Check mit Diagnose kombinieren
const reg = await navigator.serviceWorker.ready;
console.log(`Prüfe Update (Cache-Modus: ${reg.updateViaCache}) …`);
await reg.update();
console.log(reg.installing ? 'Neue Version wird installiert' : 'Keine neue Version');
// Wichtig · Fallstricke
- Schreibgeschützt: Wer
registration.updateViaCache = 'none'zuweist, ändert nichts, und es gibt auch keinen Fehler. Um den Wert zu ändern, ruft manregister()mit derselben Skript-URL und neuer Option erneut auf. - Ein ungültiger Wert bei
register()(z. B.'never') führt zu einemTypeError. - Der Standard
"imports"ist meist sinnvoll. Wenn die importierten Skripte aber versionslose Dateinamen haben und lange gecacht werden, können Nutzer veralteten Code behalten. Abhilfe schaffen Dateinamen mit Version bzw. Hash oder der Wert"none". "all"ist riskant, wennsw.jsmit langemmax-ageausgeliefert wird: Updates verzögern sich dann bis zu 24 Stunden.- Kompatibilität: Chrome 68+, Edge 79+, Firefox 57+ und Safari 11.1+ unterstützen die Eigenschaft. Ältere Browser liefern
undefinedund verhalten sich in der Regel wie bei"all". Service Worker gibt es nur in sicheren Kontexten (HTTPS oder localhost).