全局错误处理也不能消除控制台错误?

前端开发 · 2023-03-05 · 223 人浏览

问题简述

浏览器提供了若干错误处理方法,能够全局处理未捕获的异常,列举如下

// 能对语法异常和运行时异常(异步也能捕获)进行处理,但是对语法错误和网络错误无能为力
window.onerror = () => {

}

// 可以搞定网络资源加载错误(第三个参数必须是 true)
window.addEventListener('error', () => {

})

// 捕获没有 catch 的 rejection,前面二者无法处理
window.addEventListener('unhandledrejection', () => {

})

如果随便找一个网站,打开它的控制台会发现好多报错,这时如果手动给它加上错误处理,会发现自己的回调函数是一个也没有被调用,这是为什么呢?

解答

尽管控制台红红的一片全是错误,甚至有的因为使用了诸如 AdBlock, Ublock Origin 等类似的拦截插件,会出现成百上千的错误,但都是已经捕捉了的错误,因为使用了 console.error() 而看起来是大量未捕捉的错误

如果在添加了错误事件监听器后,手动 throw new Error('error content') 会发现回调函数此时尽数都被调用


Chrome DevTools
Theme Jasmine by Kent Liao