Start · Sprachen · JavaScript · Referenz · WorkerGlobalScope.origin

WorkerGlobalScope.origin

Eigenschaft

Schreibgeschützte Eigenschaft, die den Ursprung (Origin) des Worker-Scopes als serialisierte Zeichenkette liefert, z. B. <code>"https://example.com"</code>.

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

Signatur

WorkerGlobalScope.origin

Beschreibung

Die schreibgeschützte Eigenschaft origin der Schnittstelle WorkerGlobalScope gibt den Ursprung des globalen Scopes eines Workers zurück. Der Ursprung besteht aus Schema, Host und Port (z. B. https://example.com:8443). Er wird nach den Regeln der HTML-Spezifikation als Zeichenkette serialisiert. Im Worker ist sie global als self.origin oder einfach origin erreichbar.

Die Eigenschaft gilt für alle Worker-Arten, also für DedicatedWorkerGlobalScope, SharedWorkerGlobalScope und ServiceWorkerGlobalScope. Sie hilft vor allem bei Sicherheitsprüfungen, etwa um bei postMessage oder fetch festzustellen, ob eine URL zum eigenen Ursprung gehört. Außerdem kann man damit absolute URLs relativ zum eigenen Ursprung aufbauen.

Wichtig: Der Ursprung eines Workers muss nicht mit location.origin übereinstimmen. Worker aus blob:- oder data:-URLs erben den Ursprung ihres Erstellers bzw. erhalten einen opaken Ursprung. Ein opaker Ursprung wird als Zeichenkette "null" serialisiert.

Rückgabewert

Typ
string
Beschreibung
Der serialisierte Ursprung des Worker-Scopes, z. B. "https://example.com". Bei einem opaken Ursprung ist es die Zeichenkette "null".

Beispiele

Ursprung im Dedicated Worker ausgeben

// worker.js
console.log(self.origin);

// main.js (geladen von https://example.com/app/)
const worker = new Worker('worker.js');
https://example.com

Service Worker: nur Anfragen an den eigenen Ursprung cachen

// sw.js
self.addEventListener('fetch', (event) => {
  const url = new URL(event.request.url);
  if (url.origin !== self.origin) return; // Fremde Ursprünge nicht anfassen

  event.respondWith((async () => {
    const cache = await caches.open('static-v1');
    const cached = await cache.match(event.request);
    return cached ?? fetch(event.request);
  })());
});

Absolute API-URL im Worker aufbauen

// worker.js
const apiUrl = new URL('/api/daten', self.origin);

self.onmessage = async () => {
  const res = await fetch(apiUrl);
  const daten = await res.json();
  self.postMessage(daten);
};

console.log(apiUrl.href);
https://example.com/api/daten

Opaken Ursprung erkennen

// worker.js
if (self.origin === 'null') {
  console.warn('Worker läuft mit opakem Ursprung – Storage-APIs eventuell nicht verfügbar.');
} else {
  console.log(`Ursprung: ${self.origin}`);
}
Ursprung: https://example.com

// Wichtig · Fallstricke

  • Opaker Ursprung: Bei einem opaken Ursprung, etwa bei data:-URL-Workern oder in einem Sandbox-Kontext, ist der Wert die Zeichenkette "null" und nicht der Wert null. Man vergleicht deshalb mit === 'null'.
  • Nicht gleich location.origin: Bei blob:-Workern kann self.location eine blob:-URL sein, während self.origin den Ursprung des Erstellers liefert. Für Sicherheitsprüfungen sollte man self.origin verwenden.
  • Schreibgeschützt: Eine Zuweisung wie self.origin = '...' wird im nicht-strikten Modus ignoriert. Da die Eigenschaft nur einen Getter hat, wirft sie im strikten Modus (also auch in Modul-Workern) einen TypeError.
  • Sicherheit: Die Eigenschaft ersetzt keine serverseitige Prüfung. Bei eingehenden Nachrichten sollte man zusätzlich event.origin prüfen, wo diese Eigenschaft vorhanden ist.
  • Kompatibilität: Wird von allen aktuellen Browsern unterstützt, im Internet Explorer fehlt sie. Das Gegenstück im Hauptthread ist window.origin.