Signatur
Beschreibung
Innerhalb eines Web Workers (Dedicated, Shared oder Service Worker) liefert self.location ein WorkerLocation-Objekt. Seine Eigenschaft origin enthält die serialisierte Form des Origins der Skript-URL, also Schema://Host[:Port], z. B. "https://example.com" oder "http://localhost:8080". Standard-Ports (80 bei HTTP, 443 bei HTTPS) werden weggelassen.
Die Eigenschaft ist schreibgeschützt. Anders als window.location kann man über WorkerLocation nicht navigieren. Einsatzbereiche sind vor allem das Bauen absoluter URLs für fetch(), das Prüfen, ob eine angefragte Ressource vom selben Origin stammt (typisch in Service Workern beim fetch-Event), und Logging oder Diagnose.
Wichtig: location.origin beschreibt den Origin des Worker-Skripts. Wer den Origin des Sicherheitskontexts braucht, sollte das globale self.origin (WorkerGlobalScope.origin) verwenden. Bei Workern aus blob:- oder data:-URLs kann das zu anderen Werten führen, etwa zu "null" bei data:-URLs.
Rückgabewert
"https://example.com". Bei undurchsichtigen (opaken) Origins ist der Wert die Zeichenkette "null".Beispiele
Origin im Dedicated Worker auslesen
// main.js (geladen von https://example.com/app/)
const worker = new Worker('/js/worker.js');
worker.onmessage = (event) => console.log('Worker meldet:', event.data);
// /js/worker.js
postMessage(`Mein Origin: ${self.location.origin}`);
Absolute API-URL im Worker bauen
// worker.js
const apiUrl = new URL('/api/daten', self.location.origin);
self.onmessage = async () => {
const response = await fetch(apiUrl);
const daten = await response.json();
postMessage(daten);
};
console.log(apiUrl.href);
Service Worker: nur Anfragen desselben Origins cachen
// sw.js
self.addEventListener('fetch', (event) => {
const url = new URL(event.request.url);
// Fremde Origins (CDNs, Analytics) unverändert durchreichen
if (url.origin !== self.location.origin) return;
event.respondWith(
caches.match(event.request).then((cached) => cached ?? fetch(event.request))
);
});
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung an
location.originwird ignoriert (im Strict Mode gibt es einenTypeError). Im Worker ist keine Navigation möglich. - Blob- und data-URLs: Bei Workern aus
blob:-URLs erbt der Origin meist den des erzeugenden Dokuments. Beidata:-URLs ist der Origin opak und der Wert\"null\". Für Sicherheitsprüfungen besserself.originverwenden. - Vergleich: Origins sollte man als ganze Zeichenketten vergleichen (
===), nicht mitstartsWith(). Sonst würde z. B.https://example.com.evil.netals gültig durchgehen. - Kompatibilität: In allen modernen Browsern verfügbar. Im Hauptthread gibt es dafür
window.location.origin. In Node.jsworker_threadsgibt es keinWorkerLocation.