Window:错误事件

当资源加载失败或无法使用时,error 事件会在 Window 对象上触发,例如脚本执行错误。

语法

在诸如 addEventListener() 之类的 方法中使用事件名称,或设置事件处理程序属性。

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

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

注意:由于历史原因,window 上的 onerror 是唯一一个接收多个参数的事件处理程序属性。

事件类型

如果事件是由用户界面元素生成的,则事件对象是 ErrorEvent 实例;否则是 Event 实例。

Event ErrorEvent

使用说明

事件处理程序属性

由于历史原因,仅在 Window 对象上的 onerror 事件处理程序属性的行为与其他事件处理程序属性不同。

请注意,这仅适用于分配给 onerror 的处理程序,不适用于使用 addEventListener() 添加的处理程序。

取消

分配给事件处理程序属性的大多数事件处理程序可以通过从处理程序返回 false 来取消事件的默认行为

js
textarea.onkeydown = () => false;

但是,对于事件处理程序属性要取消 Windowerror 事件的默认行为,它必须改为返回 true

js
window.onerror = () => true;

取消后,错误不会出现在控制台中,但当前脚本仍将停止执行。

参数

事件处理程序的签名在 addEventListener()onerror 之间是不对称的。传递给 Window.addEventListener() 的事件处理程序接收单个 ErrorEvent 对象,而 onerror 处理程序接收五个参数,与 ErrorEvent 对象的属性匹配

事件

包含描述问题的可读错误消息的字符串。与 ErrorEvent.message 相同。

包含生成错误的脚本的 URL 的字符串。

行号

包含发生错误的脚本文件的行号的整数。

列号

包含发生错误的脚本文件的列号的整数。

错误

抛出的错误。通常是 Error 对象。

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;
};

注意:这些参数名称可以通过 HTML 事件处理程序属性 观察到,其中第一个参数称为 event 而不是 message

此特殊行为仅发生在 window 上的 onerror 事件处理程序中。 Element.onerror 处理程序仍然接收单个 ErrorEvent 对象。

示例

实时示例

HTML

html
<div class="controls">
  <button id="script-error" type="button">Generate script error</button>
  <img class="bad-img" />
</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", () => {
  const badCode = "const s;";
  eval(badCode);
});

结果

规范

规范
HTML 标准
# event-error
HTML 标准
# handler-onerror

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅

  • Element 上此事件的目标:error 事件