Signatur
Beschreibung
Der Konstruktor RTCDTMFToneChangeEvent() erzeugt ein Ereignisobjekt vom Typ RTCDTMFToneChangeEvent. Im Normalfall erzeugt der Browser diese Ereignisse selbst: Ein RTCDTMFSender löst das Ereignis tonechange jedes Mal aus, wenn er über eine WebRTC-Verbindung einen DTMF-Ton (Telefon-Wähltöne wie 0–9, *, #, A–D) zu senden beginnt, und ein letztes Mal mit leerer Zeichenkette, sobald der gesamte Tonpuffer abgearbeitet ist.
Den Konstruktor selbst braucht man vor allem für Tests, Mocks und zum Simulieren von DTMF-Ereignissen, z. B. um eine Telefon-Tastatur-Oberfläche ohne echte Peer-Verbindung zu prüfen. Das erzeugte Ereignis kann man mit dispatchEvent() an ein beliebiges EventTarget senden.
Die wichtigste Eigenschaft ist tone: Sie enthält das Zeichen des gerade gestarteten Tons oder eine leere Zeichenkette "", wenn die Tonfolge beendet ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Name des Ereignisses, üblicherweise "tonechange". Groß-/Kleinschreibung wird beachtet. |
|
| $options | object | {} | Optionales Wörterbuch. Neben den Feldern aus EventInit (bubbles, cancelable, composed) gibt es:
|
Rückgabewert
RTCDTMFToneChangeEvent-Objekt, dessen Eigenschaft tone den übergebenen Wert enthält.Beispiele
Ereignis erzeugen und auslesen
const event = new RTCDTMFToneChangeEvent('tonechange', { tone: '5' });
console.log(event.type);
console.log(event.tone);
console.log(event instanceof Event);
Tastatur-UI testen ohne echte Verbindung
// Ein einfaches EventTarget ersetzt den RTCDTMFSender im Test
const fakeSender = new EventTarget();
const anzeige = [];
fakeSender.addEventListener('tonechange', (e) => {
if (e.tone === '') {
console.log('Wählen beendet:', anzeige.join(''));
} else {
anzeige.push(e.tone);
}
});
for (const tone of ['1', '2', '3', '#', '']) {
fakeSender.dispatchEvent(new RTCDTMFToneChangeEvent('tonechange', { tone }));
}
Echter Einsatz: tonechange eines RTCDTMFSender
const pc = new RTCPeerConnection();
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const [track] = stream.getAudioTracks();
const sender = pc.addTrack(track, stream);
const dtmf = sender.dtmf;
dtmf.ontonechange = (event) => {
console.log(event.tone ? `Sende Ton: ${event.tone}` : 'Alle Töne gesendet');
};
// Erst nach aufgebauter Verbindung möglich (canInsertDTMF === true)
if (dtmf?.canInsertDTMF) {
dtmf.insertDTMF('1234#', 100, 70);
}
// Wichtig · Fallstricke
- Ein manuell erzeugtes und mit
dispatchEvent()ausgelöstes Ereignis hatisTrusted === falseund sendet keinen echten Ton. Zum Senden dient ausschließlichRTCDTMFSender.insertDTMF(). - Das Ende einer Tonfolge wird durch
tone === \"\"signalisiert. Prüfen Sie im Handler immer auf die leere Zeichenkette, sonst wird das Abschlussereignis wie ein Ton behandelt. - Ein Komma
,in der Tonfolge steht für eine Pause von 2 Sekunden und wird ebenfalls alstonegemeldet. RTCDTMFSender.canInsertDTMFist nur bei aufgebauter Verbindung und einem Audio-Tracktrue;sender.dtmfkann bei Video-Tracksnullsein.- Kompatibilität: Chrome, Edge, Firefox und Safari (ab 13.1) unterstützen die API. In Node.js gibt es sie ohne WebRTC-Bibliothek nicht.