window.addEventListener("unhandledrejection", (e) => {
console.log("error", e)
throw e.reason
})
window.addEventListener("error", (errs) => {
console.log("error", errs)
return false;
}, true)
unhandledrejection
当 Promise 被 reject 且没有 reject 处理器的时候,会触发 unhandledrejection
事件
window.addEventListener("unhandledrejection", event => {
console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
});
监听error可以捕获同步任务及除new Image()之外的资源加载错误;
监听unhandledrejection可以捕获promise错误和async错误;
没有方法可以捕获到语法错误,但是一旦出现语法错误,编译阶段是无法通过的,也就是说,我们自己可以发现语法错误,不需要进行捕获;
通过以上两种方式,可以捕获到页面中发生的绝大多数错误;
错误上报
navigator.sendBeacon()
方法可用于通过 HTTP POST 将少量数据 异步 传输到 Web 服务器。
它主要用于将统计数据发送到 Web 服务器,同时避免了用传统技术(如:XMLHttpRequest)发送分析数据的一些问题。
navigator.sendBeacon(url);
navigator.sendBeacon(url, data);
url
url
参数表明 data
将要被发送到的网络地址。
data
可选
data
参数是将要发送的 ArrayBuffer、ArrayBufferView、Blob、DOMString、FormData 或 URLSearchParams 类型的数据。
当用户代理成功把数据加入传输队列时,sendBeacon()
方法将会返回 true
,否则返回 false
。