Start · Sprachen · JavaScript · Referenz · BroadcastChannel.name

BroadcastChannel.name

Eigenschaft

Schreibgeschützte Zeichenkette mit dem Namen, der beim Erzeugen des <code>BroadcastChannel</code> übergeben wurde und den Kanal eindeutig identifiziert.

seit JavaScript Baseline: alle modernen Browser (seit 2022, Safari Kategorie: webapi

Signatur

BroadcastChannel.name

Beschreibung

Die Eigenschaft name liefert den Kanalnamen, der dem Konstruktor new BroadcastChannel(name) übergeben wurde. Alle BroadcastChannel-Objekte mit demselben Namen und derselben Herkunft (Origin) sind miteinander verbunden. Das gilt für Tabs, Fenster, iframes und Worker. Eine Nachricht, die über postMessage() gesendet wird, erreicht alle anderen Instanzen mit diesem Namen, aber nicht den Sender selbst.

Die Eigenschaft ist schreibgeschützt. Nach dem Erzeugen kann ein Kanal nicht umbenannt werden. Wer auf einen anderen Kanal wechseln will, schließt den alten mit close() und legt eine neue Instanz an.

In der Praxis nutzt man name vor allem für Protokollausgaben und zur Fehlersuche. Hilfreich ist die Eigenschaft auch, wenn ein gemeinsamer Nachrichten-Handler für mehrere Kanäle zuständig ist: Über event.target.name erkennt er, aus welchem Kanal eine Nachricht stammt.

Rückgabewert

Typ
string
Beschreibung
Der Kanalname, wie er beim Konstruktor-Aufruf übergeben wurde. Nicht-String-Werte werden dabei in einen String umgewandelt.

Beispiele

Kanalnamen auslesen

const channel = new BroadcastChannel('warenkorb-sync');
console.log(channel.name);
channel.close();
warenkorb-sync

Einen Handler für mehrere Kanäle verwenden

const kanaele = ['auth', 'theme'].map((n) => new BroadcastChannel(n));

const handler = (event) => {
  // event.target ist der empfangende BroadcastChannel
  console.log(`[${event.target.name}]`, event.data);
};

kanaele.forEach((ch) => ch.addEventListener('message', handler));

// In einem anderen Tab gleicher Origin:
// new BroadcastChannel('theme').postMessage({ mode: 'dark' });
[theme] { mode: 'dark' }

Schreibschutz und Typumwandlung

'use strict';
const ch = new BroadcastChannel(42);
console.log(typeof ch.name, ch.name);

try {
  ch.name = 'anders';
} catch (err) {
  console.log(err.constructor.name);
}
console.log(ch.name);
ch.close();
string 42 TypeError 42

// Wichtig · Fallstricke

  • Schreibgeschützt: Im nicht-strikten Modus wird eine Zuweisung an name stillschweigend ignoriert. Im strikten Modus löst sie einen TypeError aus.
  • Nur innerhalb derselben Origin: Ein gleicher Name verbindet keine Seiten unterschiedlicher Herkunft. Für Kommunikation zwischen verschiedenen Origins verwendet man window.postMessage().
  • Groß- und Kleinschreibung: Namen werden exakt verglichen. 'Chat' und 'chat' sind daher zwei verschiedene Kanäle.
  • Nach close(): name ist weiterhin lesbar. Der Kanal empfängt und sendet dann aber nichts mehr, und postMessage() wirft einen InvalidStateError.
  • Keine Geheimnisse im Namen: Jedes Skript derselben Origin kann einen Kanal mit bekanntem Namen öffnen und mitlesen. Der Name ist kein Zugriffsschutz.
  • Kompatibilität: Wird in allen aktuellen Browsern und in Workern unterstützt. Safari unterstützt die Schnittstelle erst ab Version 15.4. Node.js stellt sie seit Version 18 global bereit.