Signatur
Beschreibung
Die schreibgeschützte Eigenschaft href des WorkerLocation-Objekts gibt die vollständige URL des Skripts zurück, mit dem der Worker gestartet wurde. Innerhalb eines Workers (Dedicated Worker, Shared Worker oder Service Worker) greift man über self.location.href oder kurz location.href darauf zu.
Die URL ist bereits aufgelöst und serialisiert: Relative Pfade, die beim Erzeugen des Workers übergeben wurden (z. B. new Worker('worker.js')), erscheinen hier als absolute URL inklusive Protokoll, Host, Pfad, Query-String und Fragment. Das macht href ideal als Basis für new URL(relativ, location.href), etwa um weitere Skripte oder Ressourcen relativ zum Worker nachzuladen.
Typische Einsatzfälle sind das Auslesen von Konfigurationsparametern aus dem Query-String des Worker-Skripts, Logging und Fehlerdiagnose (welcher Worker meldet sich?) sowie das Ermitteln der Versionskennung in Service Workern.
Anders als window.location.href ist die Eigenschaft im Worker nicht beschreibbar — ein Worker kann sich nicht selbst umleiten. Die Methode toString() von WorkerLocation liefert denselben Wert.
Rückgabewert
"https://example.com/js/worker.js?mode=debug". Bei Blob-Workern eine blob:-URL, bei Data-URLs die data:-URL.Beispiele
URL des Workers ausgeben und an die Hauptseite melden
// main.js
const worker = new Worker('js/worker.js');
worker.addEventListener('message', (e) => console.log('Worker läuft unter:', e.data));
// js/worker.js
self.postMessage(self.location.href);
Konfiguration über den Query-String übergeben
// main.js
const worker = new Worker('worker.js?lang=de&debug=1');
// worker.js
const url = new URL(location.href);
const lang = url.searchParams.get('lang') ?? 'en';
const debug = url.searchParams.get('debug') === '1';
console.log(`Sprache: ${lang}, Debug: ${debug}`);
Ressourcen relativ zum Worker-Skript auflösen
// worker.js unter https://example.com/workers/worker.js
const dataUrl = new URL('../data/config.json', location.href);
console.log(dataUrl.href);
const loadConfig = async () => {
const res = await fetch(dataUrl);
return res.json();
};
loadConfig().then((cfg) => self.postMessage(cfg));
Service-Worker-Version aus der URL lesen
// Seite: navigator.serviceWorker.register('/sw.js?v=42')
// sw.js
const version = new URL(self.location.href).searchParams.get('v');
const CACHE_NAME = `app-cache-v${version}`;
self.addEventListener('install', (event) => {
event.waitUntil(caches.open(CACHE_NAME));
console.log('Installiere', CACHE_NAME);
});
// Wichtig · Fallstricke
- Nur im Worker-Kontext verfügbar: Im Hauptthread verweist
locationaufwindow.location(TypLocation), nicht aufWorkerLocation. - Schreibgeschützt: Eine Zuweisung wie
location.href = '...'wird ignoriert (im Strict Mode bzw. in Modul-Workern wirft sie einenTypeError). Weiterleitungen sind im Worker nicht möglich. - Blob- und Data-Worker: Wird ein Worker aus einer
blob:-URL erzeugt, lieferthrefdiese Blob-URL. Relative Auflösung mitnew URL('x.js', location.href)schlägt dann fehl bzw. ergibt keine sinnvolle Adresse — übergeben Sie die Basis-URL besser perpostMessage. - Weiterleitungen: Wurde das Worker-Skript per HTTP-Redirect geladen, spiegelt
hrefin modernen Browsern die finale URL wider. - Sicherheit: Query-Parameter aus
hrefsind vom Aufrufer steuerbar — nicht ungeprüft inimportScripts()oderevalverwenden. - Kompatibilität: Von allen aktuellen Browsern und Deno unterstützt; in Node.js-
worker_threadsgibt es keinWorkerLocation.