捕获异常 | js同步异常 | js异步异常 | 资源加载异常 | Promise异常 | async/await |
---|---|---|---|---|---|
try…catch… | √ | √ | |||
window.onerror | √ | √ | |||
window.addEventListener(‘error’) | √ | √ | √ | ||
window.addEventListener(‘unhandledrejection’) | √ | √ |
try catch
捕获当前调用栈中的错误,因此无法捕获异步异常(抛出错误时try catch
调用栈已经执行完毕退出。同时捕获后,异常不会向上继续抛出function errHanlder(){ try { setTimeout(()=>{ var a =null a.tostring() },0) } catch (error) { console.log('trycatch',error) } } errHanlder()
window.onerror
需要reutrn true
,否则控制台会继续抛出未捕获错误window.onerror = function(e){ console.log('onerror',e) //return true }
-
window.addEventListener('error')
静态资源等无法通过·window.onerror·获取,因为当加载失败时,加载资源的元素会触发Event
接口的error
事件,并执行该元素上的onerror()
处理函数,这些事件不会向上冒泡到window
,但可以通过addEventListener
捕获 -
跨域的JS文件异常捕获
后台添加CORS+标签添加crossorigin
-
vue 捕获
Vue.config.errorHandler