Start · Sprachen · JavaScript · Referenz · new ErrorEvent()

new ErrorEvent()

Methode

Der Konstruktor <code>ErrorEvent()</code> erstellt ein neues <code>ErrorEvent</code>-Objekt mit Details zu einem Fehler wie Meldung, Datei, Zeile, Spalte und Fehlerobjekt.

seit JavaScript Baseline: alle modernen Browser (Konstruktor seit Kategorie: webapi

Signatur

new ErrorEvent(type, options)

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:
  • message (string, Standard "") – lesbare Fehlermeldung
  • filename (string, Standard "") – Datei/URL, in der der Fehler auftrat
  • lineno (number, Standard 0) – Zeilennummer
  • colno (number, Standard 0) – Spaltennummer
  • error (any, Standard null) – das zugehörige Fehlerobjekt, meist eine Error-Instanz

Rückgabewert

Typ
ErrorEvent
Beschreibung
Ein neues 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);
error wert ist undefined app.js:42:13 true false

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);
1 Simulierter Fehler

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();
[Widget] HTTP 404 unbehandelt: false

// Wichtig · Fallstricke

  • Kein echter Fehler: Ein per dispatchEvent() ausgelöstes ErrorEvent erscheint nicht als roter Fehler in der Konsole und hat isTrusted === false. Monitoring-Code, der auf isTrusted prüft, ignoriert es.
  • window.onerror-Signatur: Ein am window ausgelöstes \"error\"-ErrorEvent ruft auch window.onerror auf – dort aber mit den Argumenten (message, filename, lineno, colno, error) statt mit dem Event-Objekt. Ein return true dort entspricht preventDefault().
  • Standardwerte: bubbles und cancelable sind false; ohne cancelable: true hat preventDefault() 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 ist ErrorEvent erst in neueren Versionen global verfügbar (ab etwa v23); für Tests wird sonst jsdom o. Ä. benötigt.