Signatur
Beschreibung
Mit new ErrorEvent() lassen sich Fehler-Ereignisse selbst erzeugen, die genauso aufgebaut sind wie die, die der Browser bei nicht abgefangenen Skriptfehlern am window oder in einem Worker auslöst. Neben den üblichen Event-Eigenschaften enthält ein ErrorEvent die Felder message, filename, lineno, colno und error.
Typische Einsätze sind Unit-Tests für globale Fehlerbehandlung (z. B. Logging- oder Monitoring-Code, der auf window.addEventListener("error", …) hört), das Weiterleiten von Fehlern aus eigenen Komponenten an ein zentrales Fehler-Handling sowie das Simulieren von Worker-Fehlern.
Ein selbst erzeugtes Event wird erst durch dispatchEvent() ausgelöst. Es ist dabei nicht vertrauenswürdig (isTrusted === false) und löst keine echte Browser-Fehlerausgabe in der Konsole aus. Standardmäßig ist es weder bubbles noch cancelable – diese Optionen müssen bei Bedarf explizit gesetzt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $type Pflicht | string | Name des Ereignisses, z. B. "error". Groß-/Kleinschreibung wird beachtet. |
|
| $options | object | {} | Optionales Objekt; zusätzlich zu den Event-Optionen (bubbles, cancelable, composed, jeweils Standard false) werden unterstützt:
|
Rückgabewert
ErrorEvent-Objekt, dessen Eigenschaften aus options initialisiert wurden.Beispiele
ErrorEvent erzeugen und Eigenschaften lesen
const err = new TypeError("wert ist undefined");
const event = new ErrorEvent("error", {
message: err.message,
filename: "app.js",
lineno: 42,
colno: 13,
error: err,
});
console.log(event.type, event.message);
console.log(`${event.filename}:${event.lineno}:${event.colno}`);
console.log(event.error instanceof TypeError, event.isTrusted);
Globalen Fehler-Handler im Test auslösen
const gemeldet = [];
const onError = (e) => {
gemeldet.push({ msg: e.message, stack: e.error?.stack ?? null });
};
window.addEventListener("error", onError);
// Fehler simulieren, ohne wirklich eine Exception zu werfen
window.dispatchEvent(new ErrorEvent("error", {
message: "Simulierter Fehler",
error: new Error("Simulierter Fehler"),
}));
console.log(gemeldet.length, gemeldet[0].msg);
window.removeEventListener("error", onError);
Fehler aus einer Komponente an ein zentrales Handling weiterreichen
const container = document.createElement("div");
document.body.append(container);
document.addEventListener("widget-error", (e) => {
console.warn(`[Widget] ${e.message}`);
e.preventDefault(); // als behandelt markieren
});
const ladeDaten = async () => {
try {
const res = await fetch("/api/gibt-es-nicht");
if (!res.ok) throw new Error(`HTTP ${res.status}`);
} catch (error) {
const ev = new ErrorEvent("widget-error", {
message: error.message,
error,
bubbles: true,
cancelable: true,
});
const unbehandelt = container.dispatchEvent(ev);
console.log("unbehandelt:", unbehandelt);
}
};
ladeDaten();
// Wichtig · Fallstricke
- Kein echter Fehler: Ein per
dispatchEvent()ausgelöstesErrorEventerscheint nicht als roter Fehler in der Konsole und hatisTrusted === false. Monitoring-Code, der aufisTrustedprüft, ignoriert es. window.onerror-Signatur: Ein amwindowausgelöstes\"error\"-ErrorEventruft auchwindow.onerrorauf – dort aber mit den Argumenten(message, filename, lineno, colno, error)statt mit dem Event-Objekt. Einreturn truedort entsprichtpreventDefault().- Standardwerte:
bubblesundcancelablesindfalse; ohnecancelable: truehatpreventDefault()keine Wirkung. - Cross-Origin-Skripte: Bei echten Fehlern aus fremden Skripten ohne CORS (
crossorigin-Attribut) liefert der Browser nur\"Script error.\"und leere Felder – diese Einschränkung betrifft selbst erzeugte Events nicht. - Kompatibilität: Der Konstruktor wird von allen modernen Browsern sowie in Workern unterstützt; der Internet Explorer kennt ihn nicht (dort nur das veraltete
initErrorEvent()). In Node.js istErrorEventerst in neueren Versionen global verfügbar (ab etwa v23); für Tests wird sonst jsdom o. Ä. benötigt.