加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动互联 > 正文

一篇文章教你如何捕获前端错误

发布时间:2019-07-16 10:59:11 所属栏目:移动互联 来源:黄文佳
导读:跟着前端页面承载成果越来越多,用户当地赏识器情形也错综伟大,因此纵然有完美的测试,我们也无法担保上线的代码不会堕落。在这种场景下,前端页面的监控就成了各个web项目必备的器材。 一样平常对页面的监控包括页面机能、页面错误以及用户举动路径获取上报
副问题[/!--empirenews.page--]

一篇文章教你怎样捕捉前端错误

跟着前端页面承载成果越来越多,用户当地赏识器情形也错综伟大,因此纵然有完美的测试,我们也无法担保上线的代码不会堕落。在这种场景下,前端页面的监控就成了各个web项目必备的器材。

一样平常对页面的监控包括页面机能、页面错误以及用户举动路径获取上报等。

而本文将重点存眷个中的错误部门,首要先容一下常见的错误范例以及怎样对它们举办捕捉并上报。

常见错误的分类

对付用户在会见页面时产生的错误,首要包罗以下几个范例:

1、js运行时错误

JavaScript代码在用户赏识器中执行时,因为一些界线环境、当地情形的不行控等身分,也许会存在js运行时错误。

而依靠客户端的某些要领,因为兼容性可能收集等题目,也有概率会呈现运行时错误。

e.g: 下图是当行使了未界说的变量"foo",导致发生js运行时错误时的上报数据:

一篇文章教你怎样捕捉前端错误

2、资源加载错误

这里的静态资源包罗js、css以及image等。此刻的web项目,每每依靠了大量的静态资源,并且一样平常也会有cdn存在。

假如某个节点呈现题目导致某个静态资源无法会见,就必要可以或许捕捉这种非常并举办上报,利便第一时刻办理题目。

e.g: 下图是图片资源不存在时的上报数据:

一篇文章教你怎样捕捉前端错误

3、未处理赏罚的promise错误

未行使catch捕捉的promise错误,每每城市存在较量大的风险。而编码时有也许包围的不足全面,因此有须要监控未处理赏罚的promise错误并举办上报。

e.g: 下图是promise哀求接口产生错误后,未举办catch时的上报数据:

一篇文章教你怎样捕捉前端错误

4、异步哀求错误(fetch与xhr)

异步错误的捕捉分为两个部门:一个是传统的XMLHttpRequest,另一个是行使fetch api。

像axios和jQuery等库就是在xhr上的封装,而有些环境也也许会行使原生的fetch,因此对这两种环境都要举办捕捉。

e.g: 下图是xhr哀求接口返回400时捕捉后的上报数据:

一篇文章教你怎样捕捉前端错误

各个范例错误的捕捉方法

1、window.onerror与window.addEventListener('error')捕捉js运行时错误

行使window.onerror和window.addEventListener('error')都能捕捉,可是window.onerror含有具体的error仓库信息,存在error.stack中,以是我们选择行使onerror的方法对js运行时错误举办捕捉。

  1. window.onerror = function (msg, url, lineNo, columnNo, error) { 
  2.     // 处理赏罚错误信息 
  3. // demo 
  4. msg: Uncaught TypeError: Uncaught ReferenceError: a is not defined 
  5. error.statck: TypeError: ReferenceError: a is not defined at http://xxxx.js:1:13 
  6. window.addEventListener('error', event => (){  
  7.   // 处理赏罚错误信息 
  8. }, false); 
  9. // true代表在捕捉阶段挪用,false代表在冒泡阶段捕捉。行使true或false都可以,默以为false 

2、资源加载错误行使addEventListener去监听error变乱捕捉

实现道理:当一项资源(如<img>或<script>)加载失败,加载资源的元素会触发一个Event接口的error变乱,并执行该元素上的onerror()处理赏罚函数。

这些error变乱不会向上冒泡到window,不外能被window.addEventListener在捕捉阶段捕捉。

但这里必要留意,因为上面提到了addEventListener也可以或许捕捉js错误,因此必要过滤停止一再上报,判定为资源错误的时辰才举办上报。

  1. window.addEventListener('error', event => (){  
  2.   // 过滤js error 
  3.   let target = event.target || event.srcElement; 
  4.   let isElementTarget = target instanceof HTMLScriptElement || target instanceof HTMLLinkElement || target instanceof HTMLImageElement; 
  5.   if (!isElementTarget) return false; 
  6.   // 上报资源地点 
  7.   let url = target.src || target.href; 
  8.   console.log(url); 
  9. }, true); 

3、未处理赏罚的promise错误处理赏罚方法

实现道理:当promise被reject而且错误信息没有被处理赏罚的时辰,会抛出一个unhandledrejection。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读