@author suix @version v1 @time 2016-01-30 @copyright MIT @codeReview "@子慕大诗人";
在复杂的网络环境和浏览器环境下,自测、QA测试以及 Code Review 都是不够的,如果对页面稳定性和准确性要求较高,就必须有一套完善的代码异常监控体系,本文用于介绍E.js前端代码异常监控解决方案。
为满足业务快速增长,特编写该解决方案,方便开发人员第一时间快速定位BUG位置,排查错误原因,提高工作效率,提高产品稳定性。
该解决方案在传递参数的时候默认会判断值是否为空,若为空将不发送空值,只发送有值的参数。在文档中标记为**(默认)**的字段名是解决方案自动获取的信息,开发人员可传递参数进行覆盖,在文档中标记为 (String) 的表示必须传递的数据类型。注意:0 !== "0"
E 为Error的缩写,E.js主要用于定位前端JS报错信息的收集,及时发送到后端服务器,方便项目出错的时候快速定位错误,排查问题。使用方式如下
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<!-- 推荐放在head,这样可以快速监听页面加载中的错误信息 -->
<script src="E.js"></script>
</head>
<body data-api="http://abc.api.baidu.com/" data-name="jule" data-wxid="oEcxUtyS2nCnem1cmF5x6Qk2oCAE" data-play="http://wx.baidu.com" data-base="http://daojia.baidu.com/">
<!-- 自定义参数,和初始化参数配置 -->
<script type="text/javascript">
var _temp_ = document.getElementsByTagName("body")[0]["dataset"];
E.init({
url:_temp_.api,//E.js把捕获到的异常信息提交到哪里(必填)
name:_temp_.name,//商户名(可选)
openId:_temp_.wxid//用户的OPENID(可选)
});
</script>
<!-- 防止跨域JS问题 返回HTTP头加 Access-Control-Allow-Origin:* -->
<script src="您的JS.js" crossorigin></script>
</body>
</html>
E.js会默认读取全局的onerror事件中的错误信息进行上报,不显示使用的情况下,默认捕捉全局所有JS报错信息。
try{
abc;//Uncaught ReferenceError: abc is not defined
}catch(e){
//在catch中手动把e信息放到上报信息中.
E.error(e);
}
ajax.G("url枚举字段",{
a:1,
b:2
}).then(function(data){
//在必要环节的错误信息上报,比如AJAX的时候,后端可能接口不稳定导致的数据信息不完整的情况。
E.error({
module:"cycle",
grade:1,//错误等级1-10
info:"自定义错误信息说明!",
http:"url枚举字段名",
code:data.code,
msg:data.msg,
result:data.result
});
});
url:"https://error.baidu.com/"
name:"jule"
openId:"oEcxUtyS2nCnem1cmF5x6Qk2oCAE"
address:"104.23565464,96.65603242"
module:"cycle"
viewUrl:"http://error.baidu.com/tabs/index",
date:"2016-01-31 00:00:15",
openId:"oEcxUtyS2nCnem1cmF5x6Qk2oCAE",
name:"jule",
address:"104.23565464,96.65603242",
grade:10,
platform:"ios",
ua:"Mozilla/5.0 ....",
file:"http://error.baidu.com/test.js",
line:128,
col:27,
lang:"zh-CN",
screen:"1920 * 1080",
carset:"UTF-8",
code:"",
info:"自定义错误描述!",
http:"http://error.baidu.com/login",
code:200,
msg:"登陆成功",
result:"{}"