Signatur
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
"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');
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);
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}`);
}
// 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 Wertnull. Man vergleicht deshalb mit=== 'null'. - Nicht gleich
location.origin: Beiblob:-Workern kannself.locationeineblob:-URL sein, währendself.originden Ursprung des Erstellers liefert. Für Sicherheitsprüfungen sollte manself.originverwenden. - 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) einenTypeError. - Sicherheit: Die Eigenschaft ersetzt keine serverseitige Prüfung. Bei eingehenden Nachrichten sollte man zusätzlich
event.originprü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.