Start · Sprachen · JavaScript · Referenz · WorkerLocation.href

WorkerLocation.href

Eigenschaft

Liefert die vollständige, serialisierte URL des Worker-Skripts als String (schreibgeschützt), abrufbar über <code>self.location.href</code>.

seit JavaScript Baseline: alle modernen Browser (Worker-Kontext) Kategorie: webapi

Signatur

WorkerLocation.href

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

Typ
string
Beschreibung
Die vollständige, absolute URL des Worker-Skripts, z. B. "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);
Worker läuft unter: https://example.com/js/worker.js

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}`);
Sprache: de, Debug: true

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));
https://example.com/data/config.json

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);
});
Installiere app-cache-v42

// Wichtig · Fallstricke

  • Nur im Worker-Kontext verfügbar: Im Hauptthread verweist location auf window.location (Typ Location), nicht auf WorkerLocation.
  • Schreibgeschützt: Eine Zuweisung wie location.href = '...' wird ignoriert (im Strict Mode bzw. in Modul-Workern wirft sie einen TypeError). Weiterleitungen sind im Worker nicht möglich.
  • Blob- und Data-Worker: Wird ein Worker aus einer blob:-URL erzeugt, liefert href diese Blob-URL. Relative Auflösung mit new URL('x.js', location.href) schlägt dann fehl bzw. ergibt keine sinnvolle Adresse — übergeben Sie die Basis-URL besser per postMessage.
  • Weiterleitungen: Wurde das Worker-Skript per HTTP-Redirect geladen, spiegelt href in modernen Browsern die finale URL wider.
  • Sicherheit: Query-Parameter aus href sind vom Aufrufer steuerbar — nicht ungeprüft in importScripts() oder eval verwenden.
  • Kompatibilität: Von allen aktuellen Browsern und Deno unterstützt; in Node.js-worker_threads gibt es kein WorkerLocation.