Start · Sprachen · JavaScript · Referenz · WorkerLocation.port

WorkerLocation.port

Eigenschaft

Gibt den Port-Teil der URL des Worker-Skripts als String zurück, z. B. <code>"8080"</code> – oder einen leeren String beim Standard-Port.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

WorkerLocation.port

Beschreibung

Die schreibgeschützte Eigenschaft port des WorkerLocation-Objekts liefert den Port-Teil der URL, von der das Worker-Skript geladen wurde. Innerhalb eines Workers bekommt man das Objekt über self.location (bzw. einfach location). Es ist das Gegenstück zu window.location.port im Hauptthread.

Der Wert ist immer ein String, keine Zahl. Nutzt die URL den Standard-Port ihres Schemas (80 bei http:, 443 bei https:), ist der String leer (""). Ein Port steht nur dann im Wert, wenn er ausdrücklich in der URL angegeben ist und vom Standard abweicht.

Praktisch ist port vor allem dann, wenn ein Worker aus seiner eigenen Herkunft weitere URLs bauen soll, etwa für API-Endpunkte oder WebSocket-Verbindungen auf demselben Host und Port. Er muss die Adresse dann nicht vom Hauptthread übergeben bekommen. Oft sind aber location.host oder location.origin besser geeignet, weil sie den Port schon passend mitliefern.

Rückgabewert

Typ
string
Beschreibung
Der Port der Worker-URL als String (z. B. "3000") oder ein leerer String, wenn kein Port angegeben ist oder der Standard-Port des Schemas genutzt wird.

Beispiele

Port im Worker auslesen

// main.js – Seite läuft auf http://localhost:3000/
const worker = new Worker('worker.js');
worker.onmessage = (event) => console.log('Worker-Port:', event.data);

// worker.js
self.postMessage(self.location.port);
Worker-Port: 3000

Leerer String beim Standard-Port abfangen

// worker.js – geladen von https://example.com/js/worker.js
const defaultPorts = { 'http:': '80', 'https:': '443' };
const effectivePort = location.port || defaultPorts[location.protocol] || '';

console.log(JSON.stringify(location.port)); // leerer String
console.log(effectivePort);
"" 443

WebSocket-URL mit demselben Port bauen

// worker.js – Verbindung zum gleichen Server wie das Worker-Skript
const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:';
const portPart = location.port ? `:${location.port}` : '';
const wsUrl = `${wsProtocol}//${location.hostname}${portPart}/live`;

console.log(wsUrl);
const socket = new WebSocket(wsUrl);
socket.onmessage = (e) => self.postMessage(e.data);
ws://localhost:8080/live

// Wichtig · Fallstricke

  • Der Wert ist ein String: Zum Rechnen oder Vergleichen mit Zahlen erst umwandeln, z. B. mit Number(location.port). Achtung: Number("") ergibt 0, nicht den echten Standard-Port.
  • Standard-Port = leerer String: Bei https://example.com:443/ ist port ebenfalls "", weil der Standard-Port bei der URL-Normalisierung wegfällt.
  • Nur lesbar: Anders als window.location.port lässt sich WorkerLocation.port nicht setzen. Ein Worker kann nicht zu einer anderen URL wechseln.
  • Blob- und Data-URLs: Wurde der Worker aus einer blob:-URL erzeugt, spiegelt location diese URL wider und port ist in der Regel leer. Bei data:-URLs ist der Ursprung undurchsichtig und port ebenfalls leer.
  • Kompatibilität: Wird in allen modernen Browsern in Dedicated, Shared und Service Workern unterstützt.