Signatur
Beschreibung
Die Eigenschaft message des ErrorEvent-Interfaces enthält eine kurze, für Menschen lesbare Beschreibung des aufgetretenen Fehlers, z. B. "Uncaught TypeError: x is not a function". Das ErrorEvent wird ausgelöst, wenn ein Skript einen nicht abgefangenen Laufzeitfehler wirft – typischerweise am window-Objekt, im globalen Kontext eines Web Workers oder am Worker-Objekt im Hauptthread.
Gebraucht wird message vor allem für globales Fehler-Logging: Zusammen mit filename, lineno, colno und error lässt sich ein vollständiger Fehlerbericht an einen Überwachungsdienst schicken. Anders als error (das eigentliche Fehlerobjekt samt Stacktrace) ist message immer ein String und deshalb einfach zu serialisieren.
Wie die Meldung genau aussieht, legt der Browser fest. Oft stellt er ein Präfix wie "Uncaught " voran, und der Text kann sich zwischen Chrome, Firefox und Safari unterscheiden. Werte ihn deshalb nicht per exaktem String-Vergleich aus, sondern prüfe bei Bedarf lieber event.error instanceof TypeError oder Ähnliches.
Rückgabewert
message erzeugt, ist der Wert ein leerer String "".Beispiele
Globale Laufzeitfehler protokollieren
window.addEventListener('error', (event) => {
console.log('Meldung:', event.message);
console.log('Ort:', `${event.filename}:${event.lineno}:${event.colno}`);
});
// Fehler absichtlich auslösen
setTimeout(() => {
undefinedFunction();
}, 0);
Fehlerbericht an einen Server senden
window.addEventListener('error', (event) => {
const report = {
message: event.message,
source: event.filename,
line: event.lineno,
column: event.colno,
stack: event.error?.stack ?? null,
url: location.href,
time: new Date().toISOString()
};
// sendBeacon funktioniert auch beim Verlassen der Seite zuverlässig
navigator.sendBeacon('/api/js-errors', JSON.stringify(report));
});
Fehler aus einem Web Worker abfangen
// Hauptthread
const worker = new Worker('worker.js');
worker.onerror = (event) => {
console.error('Worker-Fehler:', event.message);
event.preventDefault(); // Standardausgabe in der Konsole unterdrücken
};
// worker.js:
// throw new Error('Datenformat ungültig');
ErrorEvent manuell erzeugen
const evt = new ErrorEvent('error', {
message: 'Konfiguration konnte nicht geladen werden',
filename: 'config.js',
lineno: 12
});
console.log(evt.message);
console.log(new ErrorEvent('error').message === '');
// Wichtig · Fallstricke
- Cross-Origin-Skripte: Stammt der Fehler aus einem Skript einer anderen Herkunft, das ohne CORS geladen wurde, maskiert der Browser die Details.
messageist dann nur"Script error.",filenameist leer,lineno/colnosind0underroristnull. Abhilfe: das Skript mit<script crossorigin="anonymous">einbinden, und der Server mussAccess-Control-Allow-Originsenden. - Schreibgeschützt: Eine Zuweisung wie
event.message = '…'wird stillschweigend ignoriert (im Strict Mode kommt es nicht zu einem Fehler, der Wert bleibt einfach unverändert). Einen eigenen Wert kannst du nur über den Konstruktor setzen. - Uneinheitliches Format: Präfixe wie
"Uncaught "und die genauen Formulierungen hängen vom Browser ab. Für die Auswertung eignet sichevent.errorbesser. - Keine Ladefehler: Scheitert das Laden eines
<img>oder<script>, wird ein einfachesEventausgelöst und keinErrorEvent– einemessagegibt es dann nicht. - Abgelehnte Promises lösen kein
error-Ereignis aus. Dafür brauchst duunhandledrejection. - onerror-Signatur: Bei
window.onerrorbekommt der Handler als erstes Argument direkt den Meldungs-String(message, source, lineno, colno, error)und nicht das Ereignisobjekt. MitaddEventListenererhältst du dagegen dasErrorEvent. - Sicherheit: Die Meldung kann Nutzerdaten oder Teile von URLs enthalten. Füge sie nie ungefiltert per
innerHTMLein (XSS-Gefahr), sondern verwendetextContent.