Signatur
Beschreibung
Die schreibgeschützte Eigenschaft colno der Schnittstelle ErrorEvent gibt die Spaltennummer (1-basiert) zurück, an der im Skript ein Laufzeitfehler ausgelöst wurde. Zusammen mit filename und lineno lässt sich die Fehlerstelle damit genau bestimmen.
Besonders nützlich ist colno bei minifiziertem Code: Dort steht oft das ganze Bundle in einer einzigen Zeile, sodass die Zeilennummer allein kaum weiterhilft. Mit Zeile und Spalte können Fehler-Tracking-Werkzeuge über Source Maps auf die ursprüngliche Stelle im Quelltext zurückrechnen.
Man bekommt den Wert typischerweise in einem globalen error-Listener auf window oder in einem Web Worker (self) sowie auf der Seite, die den Worker erzeugt hat (worker.onerror). Beim alten Handler window.onerror = (message, source, lineno, colno, error) => {} wird die Spalte als vierter Parameter übergeben und nicht als Event-Objekt.
Rückgabewert
0.Beispiele
Fehlerposition global protokollieren
window.addEventListener('error', (event) => {
console.log(`${event.message} in ${event.filename}:${event.lineno}:${event.colno}`);
});
// Fehler auslösen
setTimeout(() => {
undefinedFunction();
}, 0);
Fehlerbericht an einen Logging-Server senden
window.addEventListener('error', (event) => {
const report = {
message: event.message,
file: event.filename,
line: event.lineno,
column: event.colno,
stack: event.error?.stack ?? null,
userAgent: navigator.userAgent
};
// sendBeacon funktioniert auch beim Schließen der Seite zuverlässig
navigator.sendBeacon('/api/js-errors', JSON.stringify(report));
});
Fehler aus einem Web Worker auswerten
const worker = new Worker('worker.js');
worker.addEventListener('error', (event) => {
event.preventDefault(); // Standard-Ausgabe in der Konsole unterdrücken
console.warn(`Worker-Fehler bei Zeile ${event.lineno}, Spalte ${event.colno}: ${event.message}`);
});
ErrorEvent selbst erzeugen (z. B. für Tests)
const evt = new ErrorEvent('error', {
message: 'Testfehler',
filename: 'test.js',
lineno: 42,
colno: 17
});
console.log(evt.colno);
// Wichtig · Fallstricke
- Cross-Origin-Skripte: Kommt der Fehler aus einem Skript von einer anderen Herkunft, das ohne
crossorigin-Attribut und passende CORS-Header (Access-Control-Allow-Origin) geladen wurde, entfernen die Browser die Details. Dann istmessagenur"Script error.", undlinenosowiecolnosind0. Abhilfe:<script src="…" crossorigin="anonymous">und ein passender CORS-Header auf dem Server. - Der Wert ist 1-basiert. Die Spalte zählt je nach Engine UTF-16-Codeeinheiten, das kann bei Emojis oder anderen Zeichen außerhalb der BMP zu Abweichungen führen.
- Die Eigenschaft ist schreibgeschützt. Eigene Werte setzt man nur über das Init-Objekt im Konstruktor
new ErrorEvent(). - Abgelehnte Promises lösen kein
error-Event aus, sondernunhandledrejection. Dort gibt es keincolno, die Position steht nur im Stack vonevent.reason. - Syntaxfehler in dynamisch per
evalausgeführtem Code melden oft Positionen, die sich auf den ausgewerteten String beziehen und nicht auf die Datei. - Browser-Kompatibilität: Wird von allen aktuellen Browsern unterstützt. Sehr alte Browser (z. B. IE bis Version 9) hatten keine Spaltenangabe.