Signatur
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
"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);
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);
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);
// Wichtig · Fallstricke
- Der Wert ist ein String: Zum Rechnen oder Vergleichen mit Zahlen erst umwandeln, z. B. mit
Number(location.port). Achtung:Number("")ergibt0, nicht den echten Standard-Port. - Standard-Port = leerer String: Bei
https://example.com:443/istportebenfalls"", weil der Standard-Port bei der URL-Normalisierung wegfällt. - Nur lesbar: Anders als
window.location.portlässt sichWorkerLocation.portnicht setzen. Ein Worker kann nicht zu einer anderen URL wechseln. - Blob- und Data-URLs: Wurde der Worker aus einer
blob:-URL erzeugt, spiegeltlocationdiese URL wider undportist in der Regel leer. Beidata:-URLs ist der Ursprung undurchsichtig undportebenfalls leer. - Kompatibilität: Wird in allen modernen Browsern in Dedicated, Shared und Service Workern unterstützt.