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 event

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 konnte - zum Beispiel, wenn ein Skript einen Ausführungsfehler hatte.

Dieses Ereignis wird nur für synchron geworfene Skriptfehler generiert, wie zum Beispiel während des initialen Ladens oder innerhalb von Ereignis-Handlern. Wenn ein Promise zurückgewiesen wurde (einschließlich eines nicht abgefangenen throw innerhalb einer async function) und keine Ablehnungshandler angebunden wurden, wird stattdessen ein unhandledrejection Ereignis ausgelöst.

Syntax

Verwenden Sie den Ereignisnamen in Methoden wie addEventListener() oder setzen Sie eine Ereignishandler-Eigenschaft.

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

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

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

Ereignistyp

Das Ereignisobjekt ist eine Instanz von ErrorEvent, wenn es von einem Benutzeroberflächenelement generiert wurde, oder eine Instanz von Event andernfalls.

Event ErrorEvent

Beschreibung

Ereignishandler-Eigenschaft

Aus historischen Gründen hat die onerror Ereignishandler-Eigenschaft, nur auf Window und WorkerGlobalScope-Objekten, ein anderes Verhalten als andere Ereignishandler-Eigenschaften.

Beachten Sie, dass dies nur für Handler gilt, die onerror zugewiesen sind, nicht für Handler, die mit addEventListener() hinzugefügt werden.

Abbruch

Die meisten Ereignishandler, die Ereignishandler-Eigenschaften zugewiesen sind, können das Standardverhalten des Ereignisses abbrechen, indem sie false aus dem Handler zurückgeben:

js
textarea.onkeydown = () => false;

Für eine Ereignishandler-Eigenschaft, um das Standardverhalten des error Ereignisses von Window abzubrechen, muss sie jedoch stattdessen true zurückgeben:

js
window.onerror = () => true;

Wenn abgebrochen wird, erscheint der Fehler nicht in der Konsole, aber das aktuelle Skript wird die Ausführung noch stoppen.

Argumente

Die Signatur des Ereignishandlers ist asymmetrisch zwischen addEventListener() und onerror. Der Ereignishandler, der an Window.addEventListener() übergeben wird, erhält ein einziges ErrorEvent-Objekt, während der onerror Handler fünf Argumente erhält, die zu den Eigenschaften des ErrorEvent-Objekts passen:

message

Ein String, der eine für Menschen lesbare Fehlermeldung beschreibt. Entspricht ErrorEvent.message.

Hinweis: Im HTML-Attribut content event handler attribute onerror auf dem <body>-Element wird der error-Ereignis-Listener window (nicht dem <body>-Element) zugeordnet. Für diesen Ereignishandler wird der erste Parameter event genannt, nicht message, obwohl er immer noch einen String enthält; das heißt, Sie würden <body onerror="console.error(event)"> verwenden, um die Fehlermeldung zu protokollieren.

source

Ein String, der die URL des Skripts enthält, das den Fehler generiert hat.

lineno

Eine Ganzzahl, die die Zeilennummer der Skriptdatei enthält, in der der Fehler aufgetreten ist.

colno

Eine Ganzzahl, die die Spaltennummer der Skriptdatei enthält, in der der Fehler aufgetreten ist.

error

Der Fehler, der geworfen wird. 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 mit einem HTML-Ereignis-Handler-Attribut beobachtbar, wobei der erste Parameter event anstelle von message genannt wird.

Dieses spezielle Verhalten tritt nur beim onerror Ereignishandler auf window auf. Der Element.onerror-Handler erhält immer noch ein einziges ErrorEvent-Objekt.

Beispiele

Live-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