Signatur
Beschreibung
Die Eigenschaft RTCDataChannel.label gibt eine Zeichenkette zurück, die den Datenkanal benennt. Der Wert wird beim Anlegen des Kanals als erstes Argument von RTCPeerConnection.prototype.createDataChannel(label, options) übergeben und kann danach nicht mehr geändert werden.
Der Name wird über die Verbindung an die Gegenseite übertragen. Auf dem entfernten Peer steht er deshalb im datachannel-Ereignis unter event.channel.label zur Verfügung. So kann die Anwendung eingehende Kanäle einem Zweck zuordnen, zum Beispiel "chat", "dateitransfer" oder "spielstand".
Die Eigenschaft eignet sich gut, um mehrere Kanäle über eine einzige RTCPeerConnection zu verteilen und bei eingehenden Nachrichten den passenden Handler auszuwählen. Die Bezeichnung muss nicht eindeutig sein. Mehrere Kanäle dürfen denselben Namen tragen. Eindeutig ist nur die id des Kanals.
Rückgabewert
"". Die Länge ist auf 65535 Byte (UTF-8) begrenzt.Beispiele
Label beim Erzeugen setzen und auslesen
const pc = new RTCPeerConnection();
const chat = pc.createDataChannel('chat');
const ohneName = pc.createDataChannel('');
console.log(chat.label);
console.log(JSON.stringify(ohneName.label));
Eingehende Kanäle auf der Gegenseite anhand des Labels verteilen
const pc = new RTCPeerConnection();
const handler = {
chat: (msg) => console.log('Chat:', msg),
dateitransfer: (msg) => console.log('Datei-Chunk erhalten:', msg.byteLength ?? msg.length),
};
pc.addEventListener('datachannel', (event) => {
const channel = event.channel;
const verarbeite = handler[channel.label];
if (!verarbeite) {
console.warn(`Unbekannter Kanal: ${channel.label}`);
channel.close();
return;
}
channel.addEventListener('message', (e) => verarbeite(e.data));
});
Lokale Loopback-Verbindung: Label kommt beim Peer an
const a = new RTCPeerConnection();
const b = new RTCPeerConnection();
a.onicecandidate = (e) => e.candidate && b.addIceCandidate(e.candidate);
b.onicecandidate = (e) => e.candidate && a.addIceCandidate(e.candidate);
b.ondatachannel = ({ channel }) => {
console.log('Empfangen:', channel.label, 'id:', channel.id);
};
a.createDataChannel('spielstand');
const offer = await a.createOffer();
await a.setLocalDescription(offer);
await b.setRemoteDescription(offer);
const answer = await b.createAnswer();
await b.setLocalDescription(answer);
await a.setRemoteDescription(answer);
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung wie
channel.label = 'neu'wird stillschweigend ignoriert. Im Strict Mode löst sie einenTypeErroraus. Wenn du einen anderen Namen brauchst, musst du einen neuen Kanal anlegen. - Nicht eindeutig: Mehrere Kanäle können dasselbe Label haben. Zur eindeutigen Kennzeichnung dient
RTCDataChannel.id. - Längenbegrenzung: Ist das Label in UTF-8 länger als 65535 Byte, wirft
createDataChannel()einenTypeError. - Ausgehandelte Kanäle: Bei
negotiated: truewird keindatachannel-Ereignis ausgelöst. Beide Seiten legen den Kanal mit derselbenidselbst an. Das Label wird dabei nicht abgeglichen und sollte auf beiden Seiten gleich gewählt werden. - Sicherheit: Das Label kommt von der Gegenseite und ist deshalb eine nicht vertrauenswürdige Eingabe. Füge es nicht ungeprüft per
innerHTMLin die Seite ein, sonst droht XSS. - Die Eigenschaft wird von allen modernen Browsern unterstützt (Chrome, Firefox, Safari, Edge). In Node.js ist sie nur über Zusatzbibliotheken wie
node-datachanneloderwrtcverfügbar.