加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 综合聚焦 > 移动互联 > 评测 > 正文

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

发布时间:2019-07-16 08:50:53 所属栏目:评测 来源:黄文佳
导读:副标题#e# 随着前端页面承载功能越来越多,用户本地浏览器环境也错综复杂,因此即使有完善的测试,我们也无法保证上线的代码不会出错。在这种场景下,前端页面的监控就成了各个web项目必备的工具。 一般对页面的监控包含页面性能、页面错误以及用户行为路径

改写fetch方法:

  1. // fetch的处理 
  2. function _errorFetchInit () { 
  3.     if(!window.fetch) return; 
  4.     let _oldFetch = window.fetch; 
  5.     window.fetch = function () { 
  6.         return _oldFetch.apply(this, arguments) 
  7.         .then(res => { 
  8.             if (!res.ok) { // 当status不为2XX的时候,上报错误 
  9.             } 
  10.             return res; 
  11.         }) 
  12.         // 当fetch方法错误时上报 
  13.         .catch(error => { 
  14.             // error.message, 
  15.             // error.stack 
  16.             // 抛出错误并且上报 
  17.             throw error;  
  18.         }) 
  19.     } 

对于XMLHttpRequest的重写:

xhr改写

  1. // xhr的处理 
  2. function _errorAjaxInit () { 
  3.     let protocol = window.location.protocol; 
  4.     if (protocol === 'file:') return; 
  5.     // 处理XMLHttpRequest 
  6.     if (!window.XMLHttpRequest) { 
  7.         return;   
  8.     } 
  9.     let xmlhttp = window.XMLHttpRequest;     
  10.     // 保存原生send方法 
  11.     let _oldSend = xmlhttp.prototype.send; 
  12.     let _handleEvent = function (event) { 
  13.         try { 
  14.             if (event && event.currentTarget && event.currentTarget.status !== 200) { 
  15.                     // event.currentTarget 即为构建的xhr实例 
  16.                     // event.currentTarget.response 
  17.                     // event.currentTarget.responseURL || event.currentTarget.ajaxUrl 
  18.                     // event.currentTarget.status 
  19.                     // event.currentTarget.statusText 
  20.                 }); 
  21.             } 
  22.         } catch (e) {va 
  23.             console.log('Tool's error: ' + e); 
  24.         } 
  25.     } 
  26.     xmlhttp.prototype.send = function () { 
  27.         this.addEventListener('error', _handleEvent); // 失败 
  28.         this.addEventListener('load', _handleEvent);  // 完成 
  29.         this.addEventListener('abort', _handleEvent); // 取消 
  30.         return _oldSend.apply(this, arguments); 
  31.     } 

关于responseURL 的说明

需要特别注意的是,当请求完全无法执行的时候,XMLHttpRequest会收到status=0 和 statusText=null的返回,此时responseURL也为空string。

另外在安卓4.4及以下版本的webview中,xhr对象也不存在responseURL属性。

(编辑:PHP编程网 - 黄冈站长网)

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

推荐文章
    热点阅读