1、 Js 语法异常,代码异常
2、 ajax 请求异常
3、 静态资源加载异常
4、 Promise 异常
promise中使用catch可以非常方便的捕获到异常error, 在全根据增加一个对unhandledrejection的
的监听。防止遗漏的Promise
window.addEventListener("unhandledrejection", functoin(e){
console.log(e);
})
5、 Iframe 异常
Iframe异常的捕获需要借助 window.onerror
window.onerror = function(message, source, lineno,. colno, error) {
console.log('捕获到异常:', { message, sourece, lineno, colno, error })
}
6、 跨域 Script error
跨域资源共享机制, 我们为 script 标签添加 crossOrigin 属性。
<script src="http://jartto.wang/main.js"></script>
或者动态去添加js脚本:
const script = document.createElement('script');
script.crossOrigin = 'anonymous';
script.src = url;
document.body.appendChild(script);
7、 崩溃和卡顿
崩溃和卡顿时不可忽视的,也许会导致你的用户流失。
1、 利用 window 对象的 load 和 beforeunload 事件实现了网页崩溃的监控。
建议阅读:[Logging Information on Browser Crashes]{http://jasonjl.me/blog/2015/06/21/taking-action-on-browser-crashes/}
2、 基于一下原因, 我们可以使用Service Worker 来实现网页奔溃的监控。
Service Worker 有自己独立的工作线程, 与网页区分开,网页奔溃了, Service Worker 一般情况下不会奔溃;
Service Worker 生命周期一般要比网页还要长, 可以用来监控网页的状态;
网页可以通过navigator.serviceWorker.controller.postMessageAPI向掌管自己的SW发送消息。
8、 try - catch
try-catch只能捕获到同步时的运行异常,对语法和异常错误却无能为力,捕获不到。
一般语法异常应该只能在开发阶段就可以看到,应该不会顺利上到线上环境。
同时一般 setTimeout 中的异常也无不会捕获。