Signatur
Beschreibung
Die schreibgeschützte Eigenschaft hash des WorkerLocation-Objekts gibt den Fragment-Bezeichner der Skript-URL des Workers zurück. Dazu gehört das führende #. Hat die URL kein Fragment oder nur ein leeres (#), ist der Wert ein leerer String "". Im Worker erreichen Sie das Objekt über self.location oder einfach location.
In der Praxis nutzt man den Hash, um einem Worker beim Start eine leichte Konfiguration mitzugeben, ohne dafür eine eigene Nachricht per postMessage() zu schicken. Beispiele sind ein Modus-Schalter, eine Debug-Kennung oder eine Instanz-ID. Der Vorteil: Das Fragment wird nie an den Server geschickt, beeinflusst also weder den HTTP-Cache noch Server-Logs.
Anders als window.location.hash ist WorkerLocation.hash nur lesbar. Ein Worker kann seine eigene URL nicht ändern, und ein hashchange-Ereignis gibt es im Worker nicht. Der Wert steht fest, sobald der Worker erzeugt wird. Bei einer Weiterleitung spiegelt er die endgültige Skript-URL wider.
Rückgabewert
#, z. B. "#debug". Ohne Fragment oder bei leerem Fragment ist es der leere String "". Das Fragment ist prozentkodiert, so wie es in der URL steht.Beispiele
Hash im Worker auslesen
// main.js
const worker = new Worker('worker.js#modus=debug');
worker.onmessage = (e) => console.log('Worker meldet:', e.data);
// worker.js
self.postMessage(`hash = "${self.location.hash}"`);
Startkonfiguration über das Fragment übergeben
// main.js
const params = new URLSearchParams({ id: 'w1', log: 'verbose' });
const worker = new Worker(`worker.js#${params}`);
// worker.js
const config = Object.fromEntries(
new URLSearchParams(location.hash.slice(1))
);
console.log(config);
if (config.log === 'verbose') {
console.log(`[${config.id}] Ausführliche Protokollierung aktiv`);
}
Fehlendes Fragment sicher behandeln
// worker.js – gestartet mit new Worker('worker.js')
const fragment = location.hash ? decodeURIComponent(location.hash.slice(1)) : null;
console.log(fragment ?? 'kein Fragment angegeben');
// Wichtig · Fallstricke
- Nur lesbar: Eine Zuweisung wie
location.hash = '#x'hat im Worker keine Wirkung. Im strikten Modus wirft sie einenTypeError, weil es keinen Setter gibt. - Kein
hashchange: Das Fragment kann sich zur Laufzeit nicht ändern. Dynamische Daten übergeben Sie perpostMessage(). - Kodierung: Der Wert ist prozentkodiert. Zum Lesen daher
decodeURIComponent()oderURLSearchParamsverwenden. - Keine Geheimnisse: Das Fragment wird zwar nicht an den Server geschickt, ist aber für jeden Code mit Zugriff auf die Worker-URL sichtbar, etwa in den DevTools. Tokens oder Zugangsdaten gehören nicht hinein.
- Service Worker: Die Fragment-Methode geht hier zwar auch, aber eine neue Skript-URL kann eine neue Registrierung bzw. ein Update auslösen. Fragmente eignen sich deshalb nur bedingt als Konfiguration.
- Kompatibilität: Wird von allen modernen Browsern in dedizierten Workern, Shared Workern und Service Workern unterstützt.