Start · Sprachen · JavaScript · Referenz · WorkerGlobalScope.location

WorkerGlobalScope.location

Eigenschaft

Schreibgeschützte Eigenschaft, die ein <code>WorkerLocation</code>-Objekt mit der URL des Worker-Skripts zurückgibt.

seit JavaScript Baseline: alle modernen Browser (Dedicated, Shared Kategorie: webapi

Signatur

WorkerGlobalScope.location

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

Typ
WorkerLocation
Beschreibung
Ein schreibgeschütztes 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 });
{ href: 'https://example.com/js/worker.js?debug=1', pathname: '/js/worker.js', search: '?debug=1', origin: 'https://example.com' }

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}`);
Worker gestartet: Sprache=de, Batch=50

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

// Wichtig · Fallstricke

  • Nicht die Seiten-URL: self.location zeigt auf das Worker-Skript, nicht auf die Seite, die den Worker erzeugt hat. Wird die Seiten-URL benötigt, muss sie per postMessage() übergeben werden.
  • Keine Navigation: WorkerLocation besitzt weder assign() noch reload() oder replace(); Zuweisungen wie self.location.href = '…' haben keine Wirkung (im Strict Mode ggf. TypeError).
  • Blob- und Data-URLs: Bei Workern aus URL.createObjectURL() liefert href eine blob:-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 location die finale URL wider.
  • Kompatibilität: In allen modernen Browsern sowie in Dedicated, Shared und Service Workern verfügbar. In Node.js-worker_threads existiert diese Eigenschaft nicht.