前端错误监控捕获和上报

1、前端错误分为两大类:

     a、即时运行错误:代码错误;
     b、资源加载错误;

2、错误的捕获方式

    a、即时运行错误: 1) try..catch            2) window.onerror 捕获;         3)window.addEventListener("error",function(){},false);

    b、资源加载错误:  1) object.onerror   2) performance.getEntries()       3) Error事件捕获

    ps: 以上的方法无法捕获跨域的js运行错误,而要捕获跨域的js运行错误,需要配置以下内容:
          客户端:在script标签 增加 crossorigin属性;
          服务器端:设置js资源响应头:Access-Control-Allow-Origin:* ;


3、上报错误的方式
     上报错误可以通过 AJAX通信的方式上报,也可以采用Image 对象上报,国内常用的使用Image对象上报错误到服务器
通过Image  对象上报的话,将错误信息拼接在 image标签的src中,例如:

(new Image()).src = report_url+需拼接的错误信息;

4、捕获上报小demo

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <title>错误捕获上报demo</title>
</head>

<body>
    <script type="text/javascript">
        var catchError = function (e) {
            e.stopImmediatePropagation();
            const srcElement = e.srcElement;
            if (srcElement === window) {
                console.log('全局错误', e);
                let { message, lineno, colno } = e;
                (new Image()).src = "http://106.15.57.244/book/test?msg=" + message + '&&lineno=' + lineno + '&&colno=' + colno;

            } else {
                console.log('资源报错', e);
                (new Image()).src = "http://106.15.57.244/book/test?src=" + srcElement.src + '&&tagName=' + srcElement.tagName;
            }
        }

        window.addEventListener(
            "error",
            catchError,
            true //网络错误,在捕获阶段获取,第三个参数为true
        );
    </script>
     <!-- error2.js 不存在 -->
    <script type="text/javascript" src="error2.js" ></script>
    <!-- error.js 中只有一句 throw new Error("出错了!"); -->
    <script type="text/javascript" src="error.js" ></script>
</body>
</html>

ps:学习过程的简单记录,须有不恰当之处,欢迎指正!
       最近比较忙,捕获和上报后面会补上完整代码demo!

//2020/05/07  添加demo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值