关于window.addEventListener的问题

我在尝试使用 window.addEventListener('error' , handle),来捕获js错误,但我发现,当我制定第三个参数为true,即

window.addEventListener('error' , handle, true),

我可以捕获 <img> <link> 等引入报错,但当我使用

window.addEventListener('error' , handle, true),

window.onerror = handle,

就无法捕获<img> <link> 等引入报错,这是什么原因?

阅读 4.7k
1 个回答

说实话这还真是一个非常好的问题,帮助我更加深入的了解到一些事件系统的细枝末节。
一些熟悉的知识点,addEventListener的第三个参数表示捕获阶段执行坚挺函数。按照你的描述,说明img等加载失败的事件可能没有冒泡阶段。顺藤摸瓜,在浏览器中打印相关事件详情:
image.png
看到了熟悉的一些属性,其中bubbles属性是false,感觉比较反常,这时候又要祭出官方文档了:https://dom.spec.whatwg.org/#...
根据描述

And then, if event’s bubbles is true, all the object’s inclusive ancestor event listeners whose capture is false are invoked, now in reverse tree order.

以及https://dom.spec.whatwg.org/#...的描述:

Returns true or false depending on how event was initialized. True if event goes through its target’s ancestors in reverse tree order; otherwise false.

我觉得可以理解为如果这个属性为false,仅触发capture阶段的监听。
更多内容可以继续探索一下。这里就不作为正经回答了。抛砖引玉,坐等真正的答案

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏