Signatur
Beschreibung
Die schreibgeschützte Eigenschaft scriptURL eines ServiceWorker-Objekts gibt die URL des Worker-Skripts als String zurück. Die URL ist immer absolut und serialisiert, auch wenn bei register() ein relativer Pfad wie './sw.js' angegeben wurde. Die Auflösung erfolgt relativ zur Basis-URL des registrierenden Dokuments.
Nützlich ist die Eigenschaft vor allem zum Debuggen und Überwachen: Man kann damit feststellen, welches Skript gerade aktiv ist, wartet oder installiert wird, zum Beispiel wenn während einer Migration mehrere Skriptnamen (sw-v1.js, sw-v2.js) im Umlauf sind oder eine Versionsnummer als Query-Parameter angehängt wird.
Erreichbar ist ein ServiceWorker-Objekt über registration.installing, registration.waiting, registration.active oder navigator.serviceWorker.controller. Innerhalb des Workers selbst gibt es self.serviceWorker.scriptURL (neuere Browser) bzw. alternativ self.location.href.
Rückgabewert
https://example.com/sw.js?v=3).Beispiele
Skript-URL nach der Registrierung ausgeben
const registerWorker = async () => {
if (!('serviceWorker' in navigator)) return;
const reg = await navigator.serviceWorker.register('./sw.js');
// Der Worker kann sich in unterschiedlichen Zuständen befinden
const worker = reg.installing ?? reg.waiting ?? reg.active;
console.log('Skript:', worker.scriptURL);
};
registerWorker();
Prüfen, welche Version die Seite gerade steuert
const EXPECTED = new URL('/sw.js?v=3', location.origin).href;
const controller = navigator.serviceWorker.controller;
if (!controller) {
console.log('Seite wird (noch) von keinem Service Worker gesteuert.');
} else if (controller.scriptURL !== EXPECTED) {
console.warn('Veralteter Worker aktiv:', controller.scriptURL);
} else {
console.log('Aktuelle Version aktiv.');
}
Alle Registrierungen mit ihren Skripten auflisten
const listWorkers = async () => {
const regs = await navigator.serviceWorker.getRegistrations();
for (const reg of regs) {
const { installing, waiting, active } = reg;
console.table({
scope: reg.scope,
installing: installing?.scriptURL ?? '-',
waiting: waiting?.scriptURL ?? '-',
active: active?.scriptURL ?? '-'
});
}
};
listWorkers();
Neuen Worker beim Update erkennen
navigator.serviceWorker.ready.then((reg) => {
reg.addEventListener('updatefound', () => {
const next = reg.installing;
console.log('Neuer Worker wird installiert:', next.scriptURL);
next.addEventListener('statechange', () => {
console.log(next.scriptURL, '→', next.state);
});
});
});
// Wichtig · Fallstricke
- Immer absolut: Ein Vergleich mit dem relativen Pfad aus
register('./sw.js')schlägt fehl. Vergleichswerte erst mitnew URL(pfad, location.href).hrefnormalisieren. - Nur lesbar: Eine Zuweisung hat keine Wirkung (im Strict Mode gibt es einen
TypeError). Wer das Skript wechseln will, mussregister()erneut mit der neuen URL aufrufen. - Nicht mit
scopeverwechseln: Der Geltungsbereich steht inServiceWorkerRegistration.scope, nicht inscriptURL. navigator.serviceWorker.controllerist beim ersten Laden und bei einem harten Neuladen (Umschalt+F5)null, also vor dem Zugriff aufscriptURLprüfen.- Service Worker gibt es nur in sicheren Kontexten (HTTPS oder
localhost). Im privaten Modus von Firefox fehlt die API. Die Eigenschaft selbst wird von allen modernen Browsern unterstützt.