在进行前端错误日志上报时,使用了sentry,他使用TraceKit来实现错误信息标准化。为什么需要格式化?因为并非所有浏览器都支持对错误对象的堆栈跟踪,一般我们在浏览器端获取程序错误信息有如下4种:
1、onerror可以捕获到宏任务抛出的错误,微任务比如:Promise,和async函数抛出的错误是捕获不到的。
window.onerror = (msg) => {
console.log('捕获到错误', msg)
}
// 可以捕获到错误
throw new Error()
// 可以捕获到错误
setTimeout(() => {
throw new Error()
})
async function fn () {
// 捕获不到这个错误
throw new Error()
}
fn()
// 捕获不到这个错误
new Promise(() => {
throw new Error()
})
2、对于本域的js抛出的错误,onerror包含了详情的错误信息。对于其他域的js抛出的错误,只会在msg中显示简单的 Script error。