Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Window: error-Ereignis

Baseline
Weitgehend verfügbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.

Das error-Ereignis wird auf einem Window-Objekt ausgelöst, wenn eine Ressource nicht geladen werden konnte oder nicht verwendet werden kann – beispielsweise, wenn bei der Ausführung eines Skripts ein Fehler auftritt.

Dieses Ereignis wird nur für synchron ausgelöste Skriptfehler erzeugt, etwa beim erstmaligen Laden oder innerhalb von Event-Handlern. Wenn ein Promise zurückgewiesen wurde (auch durch ein nicht abgefangenes throw innerhalb einer async function) und keine Rejection-Handler registriert wurden, wird stattdessen ein unhandledrejection-Ereignis ausgelöst.

Syntax

Verwenden Sie den Ereignisnamen in addEventListener():

js
addEventListener("error", (event) => { })

Alternativ können Sie einen Handler der Event-Handler-Eigenschaft der Schnittstelle zuweisen:

js
onerror = (message, source, lineno, colno, error) => { }

Hinweis: Aus historischen Gründen ist onerror bei Window- und WorkerGlobalScope-Objekten die einzige Event-Handler-Eigenschaft, die mehr als ein Argument erhält.

Ereignistyp

Das Ereignisobjekt ist eine Instanz von ErrorEvent, wenn das Ereignis von einem Benutzeroberflächenelement erzeugt wurde, andernfalls eine Instanz von Event.

Event ErrorEvent

Beschreibung

Event-Handler-Eigenschaft

Aus historischen Gründen verhält sich die Event-Handler-Eigenschaft onerror bei Window- und WorkerGlobalScope-Objekten anders als andere Event-Handler-Eigenschaften.

Dies gilt nur für Handler, die onerror zugewiesen wurden, nicht für Handler, die mit addEventListener() hinzugefügt wurden.

Abbrechen des Standardverhaltens

Die meisten Event-Handler, die Event-Handler-Eigenschaften zugewiesen wurden, können das Standardverhalten des Ereignisses abbrechen, indem sie false zurückgeben:

js
textarea.onkeydown = () => false;

Damit eine Event-Handler-Eigenschaft das Standardverhalten des error-Ereignisses von Window abbricht, muss sie dagegen true zurückgeben:

js
window.onerror = () => true;

Wird das Standardverhalten abgebrochen, erscheint der Fehler nicht in der Konsole. Die Ausführung des aktuellen Skripts wird dennoch beendet.

Argumente

Die Signatur des Event-Handlers unterscheidet sich zwischen addEventListener() und onerror. Der an Window.addEventListener() übergebene Event-Handler erhält ein einzelnes ErrorEvent-Objekt. Der onerror-Handler erhält dagegen fünf Argumente, die den Eigenschaften des ErrorEvent-Objekts entsprechen:

message

Ein String mit einer für Menschen lesbaren Fehlermeldung, die das Problem beschreibt. Entspricht ErrorEvent.message.

Hinweis: In HTML registriert das Event-Handler-Attribut im Inhalt onerror des <body>-Elements error-Event-Listener für window (nicht für das <body>-Element). Bei diesem Event-Handler heißt der erste Parameter event statt message, obwohl er ebenfalls einen String enthält. Um die Fehlermeldung zu protokollieren, verwenden Sie also <body onerror="console.error(event)">.

source

Ein String mit der URL des Skripts, das den Fehler verursacht hat.

lineno

Eine Ganzzahl mit der Zeilennummer der Skriptdatei, in der der Fehler aufgetreten ist.

colno

Eine Ganzzahl mit der Spaltennummer der Skriptdatei, in der der Fehler aufgetreten ist.

error

Der ausgelöste Fehler. In der Regel ein Error-Objekt.

js
window.onerror = (a, b, c, d, e) => {
  console.log(`message: ${a}`);
  console.log(`source: ${b}`);
  console.log(`lineno: ${c}`);
  console.log(`colno: ${d}`);
  console.log(`error: ${e}`);

  return true;
};

Hinweis: Diese Parameternamen sind bei einem HTML-Event-Handler-Attribut sichtbar. Dort heißt der erste Parameter event statt message.

Dieses besondere Verhalten tritt nur beim onerror-Event-Handler von window auf. Der Handler Element.onerror erhält weiterhin ein einzelnes ErrorEvent-Objekt.

Beispiele

Interaktives Beispiel

HTML

html
<div class="controls">
  <button id="script-error" type="button">Generate script error</button>
  <img src="bad-image.jpg" class="bad-img" alt="I don't exist" />
</div>

<div class="event-log">
  <label for="eventLog">Event log:</label>
  <textarea
    readonly
    class="event-log-contents"
    rows="8"
    cols="30"
    id="eventLog"></textarea>
</div>

JavaScript

js
const log = document.querySelector(".event-log-contents");

window.addEventListener("error", (event) => {
  log.textContent = `${log.textContent}${event.type}: ${event.message}\n`;
  console.log(event);
});

const scriptError = document.querySelector("#script-error");
scriptError.addEventListener("click", () => {
  throw new Error("This is a script error");
});

Ergebnis

Spezifikationen

Spezifikation
HTML
# event-error
HTML
# handler-onerror

Browser-Kompatibilität

Siehe auch