Start · Sprachen · JavaScript · Referenz · ErrorEvent.colno

ErrorEvent.colno

Eigenschaft

Schreibgeschützte Eigenschaft, die die Spaltennummer in der Skriptdatei als ganze Zahl liefert, an der der Fehler aufgetreten ist.

seit JavaScript Baseline: alle Browser (auch in Web Workern verfüg Kategorie: webapi

Signatur

ErrorEvent.colno

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

Typ
number
Beschreibung
Ganze Zahl mit der Spaltennummer der Fehlerstelle. Ist keine Angabe verfügbar, liefert die Eigenschaft 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);
Uncaught ReferenceError: undefinedFunction is not defined in https://example.com/app.js:6:3

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}`);
});
Worker-Fehler bei Zeile 12, Spalte 9: Uncaught TypeError: Cannot read properties of null

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);
17

// 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 ist message nur "Script error.", und lineno sowie colno sind 0. 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, sondern unhandledrejection. Dort gibt es kein colno, die Position steht nur im Stack von event.reason.
  • Syntaxfehler in dynamisch per eval ausgefü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.