Start · Sprachen · JavaScript · Referenz · WorkerLocation.host

WorkerLocation.host

Eigenschaft

Liefert den Host-Teil (Hostname plus ggf. Port) der URL, von der das Worker-Skript geladen wurde, als schreibgeschützten String.

seit JavaScript Baseline: alle modernen Browser (Web Workers) Kategorie: webapi

Signatur

WorkerLocation.host

Beschreibung

Die schreibgeschützte Eigenschaft host des WorkerLocation-Objekts gibt den Host-Teil der Skript-URL des Workers zurück. Dazu gehört der Hostname und, sofern die URL einen vom Standard abweichenden Port enthält, ein Doppelpunkt mit der Portnummer, z. B. "example.com:8080". Bei Standard-Ports (80 bei http:, 443 bei https:) fehlt der Port.

Innerhalb eines Workers (Dedicated, Shared oder Service Worker) erreichst du das Objekt über self.location bzw. einfach location. Es entspricht einer schreibgeschützten Variante von window.location. Anders als im Hauptthread lässt sich die Adresse hier nicht ändern.

Typische Einsatzfälle sind das Zusammensetzen absoluter URLs für fetch()-Aufrufe und WebSocket-Verbindungen zum eigenen Server, umgebungsabhängige Konfiguration (Entwicklung oder Produktion) sowie Protokollierung und Fehlersuche.

Rückgabewert

Typ
string
Beschreibung
Hostname der Worker-Skript-URL, gefolgt von :port, wenn ein Nicht-Standard-Port verwendet wird. Bei URLs ohne Host (z. B. blob: oder data:) ist der Wert unter Umständen ein leerer String.

Beispiele

Host im Worker auslesen

// worker.js – geladen von https://app.example.com:8443/js/worker.js
console.log(self.location.host);
console.log(self.location.hostname);
console.log(self.location.port);
app.example.com:8443 app.example.com 8443

WebSocket-URL zum eigenen Server bauen

// worker.js
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const socket = new WebSocket(`${wsProtocol}//${location.host}/live`);

socket.addEventListener('message', (event) => {
  self.postMessage(JSON.parse(event.data));
});

Umgebungsabhängige API-Basis wählen

// worker.js
const isDev = location.host.startsWith('localhost');
const apiBase = isDev ? `http://${location.host}/api` : 'https://api.example.com';

self.addEventListener('message', async ({ data }) => {
  const res = await fetch(`${apiBase}/items/${data.id}`);
  self.postMessage(await res.json());
});

Host aus dem Hauptthread abfragen

// main.js
const worker = new Worker('/js/host-worker.js');
worker.onmessage = (e) => console.log('Worker-Host:', e.data);

// host-worker.js
self.postMessage(self.location.host);
Worker-Host: example.com

// Wichtig · Fallstricke

  • host oder hostname: host enthält einen gesetzten Port, hostname nie. Für Vergleiche von Domains nimmst du besser hostname.
  • Standard-Ports fehlen: Bei https://example.com:443/ liefert host nur "example.com".
  • Blob- und Data-Worker: Wird der Worker aus einer blob:-URL erzeugt, spiegelt location diese URL wider. host ist dann in der Regel leer. Übergib die benötigte Server-Adresse in diesem Fall per postMessage.
  • Schreibgeschützt: Eine Zuweisung hat keine Wirkung. Im strikten Modus wirft sie einen TypeError, weil es nur einen Getter gibt.
  • IPv6: Adressen stehen in eckigen Klammern, z. B. "[::1]:3000".
  • Kompatibilität: Wird von allen modernen Browsern und von Deno unterstützt. In Node.js-worker_threads gibt es kein WorkerLocation.