Signatur
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
Beispiele
Kanalnamen auslesen
const channel = new BroadcastChannel('warenkorb-sync');
console.log(channel.name);
channel.close();
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' });
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();
// Wichtig · Fallstricke
- Schreibgeschützt: Im nicht-strikten Modus wird eine Zuweisung an
namestillschweigend ignoriert. Im strikten Modus löst sie einenTypeErroraus. - 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():nameist weiterhin lesbar. Der Kanal empfängt und sendet dann aber nichts mehr, undpostMessage()wirft einenInvalidStateError. - 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.