Signatur
Beschreibung
Die Eigenschaft ErrorEvent.error enthält den JavaScript-Wert, der beim Auslösen des Fehlers geworfen wurde. Wirft ein Skript mit throw new TypeError("…"), landet dieses Objekt in event.error, samt name, message und (nicht standardisiertem, aber überall vorhandenem) stack.
Wichtig ist das für globale Fehlerbehandlung: Mit einem error-Listener auf window (oder self in einem Worker) kann man nicht abgefangene Ausnahmen protokollieren und an einen Monitoring-Dienst schicken. Im Gegensatz zu ErrorEvent.message, das nur eine Zeichenkette ist, bekommt man über error das eigentliche Fehlerobjekt mit Stacktrace und eigenen Zusatzfeldern.
Da in JavaScript jeder Wert geworfen werden kann (throw "Text", throw 42, throw null), ist error vom Typ any. Man sollte also nicht einfach annehmen, dass es ein Error ist, sondern das vorher mit instanceof Error prüfen.
Rückgabewert
Error oder eine DOMException. Kann null sein, etwa bei Skriptfehlern aus anderen Ursprüngen oder bei Events, die ohne error-Option erzeugt wurden.Beispiele
Globaler Fehler-Handler mit Stacktrace
window.addEventListener("error", (event) => {
const { error, message, filename, lineno, colno } = event;
if (error instanceof Error) {
console.log(`${error.name}: ${error.message}`);
console.log(error.stack);
} else {
// Kein Error-Objekt: z. B. throw "Text" oder Cross-Origin-Fehler
console.log("Fehler ohne Objekt:", message, filename, lineno, colno);
}
});
setTimeout(() => {
throw new TypeError("Benutzer nicht gefunden");
}, 0);
Fehler an einen Monitoring-Endpunkt senden
const serialisiere = (err) =>
err instanceof Error
? { name: err.name, message: err.message, stack: err.stack }
: { value: String(err) };
window.onerror = null; // nur addEventListener verwenden
window.addEventListener("error", (event) => {
const payload = {
...serialisiere(event.error),
url: location.href,
datei: event.filename,
zeile: event.lineno,
zeit: new Date().toISOString()
};
navigator.sendBeacon("/api/fehler", JSON.stringify(payload));
});
ErrorEvent manuell erzeugen und auslesen
const fehler = new RangeError("Wert außerhalb des Bereichs");
const event = new ErrorEvent("error", {
message: fehler.message,
error: fehler
});
console.log(event.error === fehler);
console.log(event.error.name);
// Ohne error-Option ist der Wert null
console.log(new ErrorEvent("error").error);
Fehler aus einem Web Worker
// main.js
const worker = new Worker("worker.js");
worker.addEventListener("error", (event) => {
// Im Hauptthread steht das Objekt meist nicht zur Verfügung
console.log("Meldung:", event.message);
console.log("error:", event.error);
event.preventDefault();
});
// worker.js
// self.addEventListener("error", (e) => console.log(e.error?.stack));
// throw new Error("Absturz im Worker");
// Wichtig · Fallstricke
- Cross-Origin-Skripte: Kommt der Fehler aus einem Skript eines anderen Ursprungs, maskiert der Browser die Angaben:
messageist dann"Script error."underroristnull. Abhilfe: das Skript mitcrossorigin="anonymous"laden und vom Server den HeaderAccess-Control-Allow-Originsenden lassen. - Beliebige Werte: Geworfen werden kann alles, auch Zeichenketten oder
undefined. Vor dem Zugriff auf.stackdeshalb mitinstanceof Erroroder optionaler Verkettung (event.error?.stack) absichern. - Abgelehnte Promises lösen kein
error-Event aus, sondernunhandledrejection. Den Grund liefert dortPromiseRejectionEvent.reason. - Ressourcenfehler (z. B. ein
<img>, das nicht lädt) erzeugen ein einfachesEvent, keinErrorEvent.event.errorist dannundefined. - Bei
window.onerrorkommt der Fehlerwert als fünftes Argument an:(message, source, lineno, colno, error), und nicht als Event-Objekt. - Datenschutz: Stacktraces und Fehlermeldungen können URLs, Tokens oder Benutzerdaten enthalten. Vor dem Versand an externe Dienste bereinigen.
- Die Eigenschaft wird von allen modernen Browsern unterstützt. Sehr alte Browser (IE ≤ 10) kennen sie nicht.