Signatur
Beschreibung
Der Konstruktor MediaRecorderErrorEvent() erzeugt ein Ereignisobjekt, das einen Fehler der MediaStream Recording API darstellt. Normalerweise erzeugt der Browser solche Objekte selbst und löst sie als error-Ereignis auf einer MediaRecorder-Instanz aus, zum Beispiel wenn die Aufnahme wegen eines Sicherheitsproblems, fehlender Ressourcen oder eines nicht unterstützten Formats abgebrochen wird.
Selbst ruft man den Konstruktor vor allem in Tests, beim Mocken einer Aufnahme-Komponente oder zum Weiterleiten eines Fehlers an eigene Listener auf. Das Objekt erbt von Event und hat zusätzlich die schreibgeschützte Eigenschaft error. Sie enthält eine DOMException, deren name die Fehlerart angibt (etwa SecurityError, InvalidStateError, UnknownError oder EncodingError).
Die Schnittstelle stammt aus einer älteren Fassung der Spezifikation und wurde dort entfernt. Nach der aktuellen Spezifikation feuert MediaRecorder nur noch ein allgemeines error-Ereignis. Schreib deshalb Code, der nicht auf diesen Konstruktor angewiesen ist, und prüfe vor der Verwendung, ob er vorhanden ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Name des Ereignisses, üblicherweise "error". Die Groß- und Kleinschreibung wird beachtet. |
|
| $options Pflicht | object | Das Wörterbuch zur Initialisierung. Es enthält error (DOMException, Pflicht: der aufgetretene Fehler) und dazu die geerbten Event-Optionen bubbles, cancelable und composed (jeweils boolean, Standard false). |
Rückgabewert
MediaRecorderErrorEvent-Objekt, dessen Eigenschaft error auf die übergebene DOMException verweist.Beispiele
Ereignis erzeugen (mit Prüfung auf Unterstützung)
if ('MediaRecorderErrorEvent' in window) {
const fehler = new DOMException('Kodierung fehlgeschlagen', 'EncodingError');
const event = new MediaRecorderErrorEvent('error', { error: fehler });
console.log(event.type); // "error"
console.log(event.error.name); // "EncodingError"
console.log(event.error.message);
} else {
console.log('MediaRecorderErrorEvent wird nicht unterstützt');
}
Fehlerbehandlung eines MediaRecorders testen
const start = async () => {
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const recorder = new MediaRecorder(stream);
recorder.addEventListener('error', (event) => {
// Browserübergreifend: error ist nur bei MediaRecorderErrorEvent vorhanden
const name = event.error?.name ?? 'UnbekannterFehler';
console.error(`Aufnahme abgebrochen: ${name}`);
stream.getTracks().forEach((track) => track.stop());
});
recorder.start();
// Fehler simulieren, z. B. in einem Test
const simuliert = 'MediaRecorderErrorEvent' in window
? new MediaRecorderErrorEvent('error', {
error: new DOMException('Test', 'SecurityError')
})
: new Event('error');
recorder.dispatchEvent(simuliert);
};
start();
Eigene Fehlerklasse für Tests nachbilden (Polyfill-Ersatz)
// Für Test-Umgebungen ohne native Unterstützung
class FakeRecorderErrorEvent extends Event {
#error;
constructor(type, { error, ...init } = {}) {
super(type, init);
this.#error = error;
}
get error() {
return this.#error;
}
}
const Ctor = window.MediaRecorderErrorEvent ?? FakeRecorderErrorEvent;
const ev = new Ctor('error', {
error: new DOMException('Kein Speicher', 'UnknownError')
});
console.log(ev instanceof Event, ev.error.name);
// Wichtig · Fallstricke
- Veraltet:
MediaRecorderErrorEventist nicht mehr Teil der Spezifikation und wird nur von Firefox unterstützt. Chrome, Edge und Safari kennen den Konstruktor nicht. Ein Aufruf dort löst einenReferenceErroraus. Prüfe daher immer vorher mit'MediaRecorderErrorEvent' in window, ob er verfügbar ist. - In
error-Listenern solltest duevent.errornur mit optionaler Verkettung (event.error?.name) lesen, denn andere Browser liefern ein einfachesEventohne diese Eigenschaft. - Die Option
errorist Pflicht. Fehlt sie, wirft der Konstruktor einenTypeError. - Ein selbst erzeugtes und mit
dispatchEvent()ausgelöstes Ereignis hatisTrusted === false. Es beendet die Aufnahme nicht, sondern ruft nur die registrierten Listener auf.