Signatur
Beschreibung
Die Methode toString() eines WorkerLocation-Objekts liefert die vollständige URL des gerade ausgeführten Worker-Skripts. Das Objekt erreicht man im Worker über self.location (bzw. einfach location). Der Rückgabewert ist genau derselbe wie bei der schreibgeschützten Eigenschaft WorkerLocation.href.
Da es sich um einen sogenannten Stringifier handelt, wird die Methode automatisch aufgerufen, sobald das Objekt in einen String umgewandelt wird, etwa in Template-Literalen, bei der Verkettung mit + oder bei String(location). Deshalb ruft man sie selten ausdrücklich auf.
Praktisch nützlich ist das, wenn man relative Pfade zum Worker-Skript auflösen will (zum Beispiel für importScripts() oder fetch()), wenn man die Worker-URL protokollieren möchte oder wenn man sie an den Hauptthread zurückmeldet. Anders als window.location ist WorkerLocation nur lesbar. Eine Navigation ist darüber nicht möglich.
Beispiele
Worker-URL explizit und implizit auslesen
// worker.js
console.log(self.location.toString());
console.log(`${location}`); // implizite Umwandlung
console.log(String(location) === location.href);
URL an den Hauptthread melden
// main.js
const worker = new Worker('/js/worker.js?build=42');
worker.addEventListener('message', (event) => {
console.log('Worker läuft unter:', event.data);
});
// worker.js
self.postMessage(location.toString());
Relative Ressourcen im Verhältnis zum Worker-Skript auflösen
// worker.js (geladen von https://example.com/js/worker.js)
const dataUrl = new URL('../data/config.json', location.toString());
const loadConfig = async () => {
const response = await fetch(dataUrl);
return response.json();
};
console.log(dataUrl.href);
Query-Parameter der Worker-URL auswerten
// main.js: new Worker('worker.js?mode=debug')
// worker.js
const params = new URL(location.toString()).searchParams;
const debug = params.get('mode') === 'debug';
console.log('Debug-Modus:', debug);
// Wichtig · Fallstricke
toString()undhrefgeben immer denselben Wert zurück. Für einzelne Bestandteile wiepathname,searchoderhashsollte man lieber direkt die passenden Eigenschaften vonWorkerLocationnutzen oder die URL mitnew URL()zerlegen.WorkerLocationgibt es nur in Worker-Kontexten (DedicatedWorkerGlobalScope,SharedWorkerGlobalScope,ServiceWorkerGlobalScope). Im Hauptthread verweistlocationdagegen aufwindow.location.- Bei Workern, die aus einem Blob erzeugt wurden (
URL.createObjectURL()), liefert die Methode eineblob:-URL. Relative Pfade lassen sich dann nicht sinnvoll dagegen auflösen. In dem Fall sollte man die Basis-URL besser perpostMessageübergeben. - Die URL kann Query-Parameter mit sensiblen Daten enthalten, etwa Tokens. Vorsicht beim Protokollieren oder Weitergeben.
- Browser-Kompatibilität: Die Methode wird von allen modernen Browsern unterstützt, sofern sie Web Worker anbieten.