Start · Sprachen · JavaScript · Referenz · SharedWorkerGlobalScope.name

SharedWorkerGlobalScope.name

Eigenschaft

Gibt innerhalb eines SharedWorker den Namen als String zurück, der beim Erzeugen mit <code>new SharedWorker(url, name)</code> vergeben wurde. Schreibgeschützt.

seit JavaScript Chrome 4+, Firefox 29+, Safari 16+ (Chrome Android Kategorie: webapi

Signatur

SharedWorkerGlobalScope.name

Beschreibung

Die schreibgeschützte Eigenschaft name steht nur im globalen Gültigkeitsbereich eines SharedWorker zur Verfügung, also als self.name oder einfach name. Sie enthält den Namen, den das erzeugende Skript als zweites Argument an den Konstruktor new SharedWorker(url, name) übergeben hat. Alternativ geht das über die Option { name } im Optionsobjekt.

Der Name gehört zur Identität des SharedWorker. Der Browser verbindet alle Seiten desselben Ursprungs, die dieselbe Skript-URL und denselben Namen verwenden, mit derselben Worker-Instanz. Mit unterschiedlichen Namen lassen sich deshalb mehrere voneinander getrennte Instanzen desselben Skripts starten, zum Beispiel eine pro Benutzerkonto oder pro Datenkanal.

Im Worker selbst nutzt man name meist für Logging und Fehlersuche. Man kann damit aber auch das Verhalten steuern: Derselbe Code entscheidet anhand des Namens, welche Rolle er übernimmt oder welchen Speicherbereich (etwa eine IndexedDB-Datenbank) er verwendet.

Wurde kein Name angegeben, ist der Wert ein leerer String "".

Rückgabewert

Typ
string
Beschreibung
Der beim Erzeugen vergebene Name des SharedWorker. Wurde keiner vergeben, ist es ein leerer String "".

Beispiele

Namen beim Erzeugen vergeben und im Worker auslesen

// main.js
const worker = new SharedWorker('shared.js', 'chat-hub');
worker.port.start();
worker.port.onmessage = (e) => console.log(e.data);

// shared.js
onconnect = (event) => {
  const port = event.ports[0];
  port.postMessage(`Verbunden mit Worker "${self.name}"`);
};
Verbunden mit Worker "chat-hub"

Getrennte Instanzen pro Benutzerkonto

// main.js – jede Konto-ID bekommt ihre eigene Worker-Instanz
const accountId = 'user-42';
const worker = new SharedWorker('sync.js', { name: `sync:${accountId}` });
worker.port.postMessage({ type: 'status' });
worker.port.onmessage = (e) => console.log(e.data);

// sync.js
const account = self.name.split(':')[1] ?? 'unbekannt';
let connections = 0;

onconnect = (event) => {
  const port = event.ports[0];
  connections++;
  port.onmessage = () => {
    port.postMessage(`Konto ${account}: ${connections} Verbindung(en)`);
  };
};
Konto user-42: 1 Verbindung(en)

Fehlender Name und Logging mit Präfix

// main.js
const worker = new SharedWorker('logger.js'); // ohne Namen
worker.port.onmessage = (e) => console.log(e.data);

// logger.js
const label = self.name || '(ohne Namen)';
const log = (...args) => console.log(`[SharedWorker ${label}]`, ...args);

onconnect = (event) => {
  const port = event.ports[0];
  log('neue Verbindung');
  port.postMessage(`name = ${JSON.stringify(self.name)}`);
};
name = ""

// Wichtig · Fallstricke

  • Nur lesbar: Der Name wird ausschließlich beim Erzeugen festgelegt. Wenn man im Worker self.name = '…' zuweist, ändert das weder die Identität noch den Wert zuverlässig. Im Strict Mode kann eine solche Zuweisung je nach Implementierung einen Fehler auslösen.
  • Identität: Ein anderer Name bei gleicher URL erzeugt eine neue Instanz. Das Umgekehrte gilt nicht: Derselbe Name mit einer anderen URL verbindet nicht mit dem vorhandenen Worker. In älteren Spezifikationsständen konnte das sogar eine Ausnahme auslösen.
  • Der Name ist kein Geheimnis und kein Mittel zur Zugriffskontrolle. Jede Seite desselben Ursprungs kann sich mit demselben Namen verbinden.
  • Das Gegenstück in dedizierten Workern ist DedicatedWorkerGlobalScope.name.
  • Kompatibilität: SharedWorker gibt es in Chrome, Edge, Firefox und Safari 16+ auf dem Desktop, aber nicht in Chrome für Android. Vorher prüfen mit if ('SharedWorker' in window).
  • Zum Debuggen: In Chrome listet chrome://inspect/#workers SharedWorker auf und macht sie inspizierbar. Firefox bietet dafür about:debugging.