Signatur
Beschreibung
Innerhalb eines Workers gibt es kein window und damit auch kein window.location. Stattdessen stellt der globale Gültigkeitsbereich des Workers (self) die Eigenschaft location bereit. Sie liefert ein WorkerLocation-Objekt, das die absolute URL des Worker-Skripts beschreibt – also die URL, die beim Erzeugen des Workers angegeben wurde (nach eventuellen Weiterleitungen).
WorkerLocation ist eine schreibgeschützte Teilmenge von Location: Es gibt die Eigenschaften href, protocol, host, hostname, port, pathname, search, hash und origin sowie die Methode toString(). Methoden zur Navigation wie assign(), reload() oder replace() fehlen, denn ein Worker kann nicht „wegnavigieren“.
Typische Einsatzzwecke: relative URLs gegenüber dem Skriptpfad auflösen (z. B. für fetch() oder importScripts()), Konfigurationswerte über Query-Parameter an den Worker übergeben, oder in einem Service Worker den Scope- bzw. Herkunftskontext prüfen.
Rückgabewert
WorkerLocation-Objekt mit den URL-Bestandteilen des Worker-Skripts. Die Eigenschaft selbst kann nicht neu zugewiesen werden.Beispiele
URL des Worker-Skripts auslesen
// main.js
const worker = new Worker('/js/worker.js?debug=1');
worker.onmessage = (e) => console.log(e.data);
// worker.js
const { href, pathname, search, origin } = self.location;
self.postMessage({ href, pathname, search, origin });
Konfiguration über Query-Parameter übergeben
// main.js
const worker = new Worker(`worker.js?lang=de&batch=50`);
// worker.js
const params = new URLSearchParams(self.location.search);
const lang = params.get('lang') ?? 'en';
const batchSize = Number(params.get('batch') ?? 10);
console.log(`Worker gestartet: Sprache=${lang}, Batch=${batchSize}`);
Relative Ressourcen gegenüber dem Skriptpfad auflösen
// worker.js (liegt unter /js/workers/)
const dataUrl = new URL('../data/config.json', self.location.href);
const loadConfig = async () => {
const res = await fetch(dataUrl);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
return res.json();
};
loadConfig()
.then((cfg) => self.postMessage({ type: 'config', cfg }))
.catch((err) => self.postMessage({ type: 'error', message: err.message }));
console.log(dataUrl.href);
// Wichtig · Fallstricke
- Nicht die Seiten-URL:
self.locationzeigt auf das Worker-Skript, nicht auf die Seite, die den Worker erzeugt hat. Wird die Seiten-URL benötigt, muss sie perpostMessage()übergeben werden. - Keine Navigation:
WorkerLocationbesitzt wederassign()nochreload()oderreplace(); Zuweisungen wieself.location.href = '…'haben keine Wirkung (im Strict Mode ggf.TypeError). - Blob- und Data-URLs: Bei Workern aus
URL.createObjectURL()lieferthrefeineblob:-URL; relative Pfade lassen sich dann nicht sinnvoll auflösen. Übergeben Sie in diesem Fall eine Basis-URL explizit. - Weiterleitungen: Bei Weiterleitungen des Skripts spiegelt
locationdie finale URL wider. - Kompatibilität: In allen modernen Browsern sowie in Dedicated, Shared und Service Workern verfügbar. In Node.js-
worker_threadsexistiert diese Eigenschaft nicht.