Start · Sprachen · JavaScript · Referenz · WorkerLocation.origin

WorkerLocation.origin

Eigenschaft

Die schreibgeschützte Eigenschaft <code>WorkerLocation.origin</code> gibt den Origin (Schema, Host, Port) des Worker-Skripts als Zeichenkette zurück.

seit JavaScript Baseline: alle modernen Browser (Chrome 38+, Firef Kategorie: webapi

Signatur

WorkerLocation.origin

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

Typ
string
Beschreibung
Der serialisierte Origin der Worker-Skript-URL, z. B. "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}`);
Worker meldet: Mein Origin: https://example.com

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);
https://example.com/api/daten

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.origin wird ignoriert (im Strict Mode gibt es einen TypeError). Im Worker ist keine Navigation möglich.
  • Blob- und data-URLs: Bei Workern aus blob:-URLs erbt der Origin meist den des erzeugenden Dokuments. Bei data:-URLs ist der Origin opak und der Wert \"null\". Für Sicherheitsprüfungen besser self.origin verwenden.
  • Vergleich: Origins sollte man als ganze Zeichenketten vergleichen (===), nicht mit startsWith(). Sonst würde z. B. https://example.com.evil.net als gültig durchgehen.
  • Kompatibilität: In allen modernen Browsern verfügbar. Im Hauptthread gibt es dafür window.location.origin. In Node.js worker_threads gibt es kein WorkerLocation.