TKP 中文站
栏目分类
热点资讯
vBUSD中文网

你的位置:TKP 中文站 > vBUSD中文网 > 前端错误捕获方案总结

前端错误捕获方案总结

发布日期:2025-01-03 17:26    点击次数:168

写在前面 在前端监控 sdk 开发中,我们都会用到错误捕获,将页面各类错误进行捕获并上报日志,来获取错误信息,所以我们非常有必要深入了解下各类错误的错误捕获方式。 补充 setTimeout 错误捕获方式:https://www.cnblogs.com/beileixinqing/p/16987679.html window.onerror 和window.addEventListener('error',fn,true)的区别 : https://www.cnblogs.com/beileixinqing/p/17013219.html 注意 错误捕获事件监听要写在最前面,即要保证在错误代码运行前已经监听 unhandledrejection 事件仅当 promise reject 且没有使用 catch 捕获的时候会触发 由于网络请求异常不会事件冒泡,因此必须在捕获阶段将其捕捉到才行,于是window.addEventListener 设置为 true 在捕获阶段进行 正文 错误信息是最基础也是最重要的数据,错误信息主要分为下面几类: JS 代码运行错误、语法错误等 异步错误等 静态资源加载错误 接口请求报错 错误捕获方式 1)try/catch 只能捕获代码常规的运行错误,语法错误和异步错误不能捕获到 示例: 2) window.onerror window.onerror 可以捕获常规错误、异步错误,但不能捕获资源错误 3) window.addEventListener 当静态资源加载失败时,会触发 error 事件, 此时 window.onerror 不能捕获到 示例: 4)Promise错误 Promise中抛出的错误,无法被 window.onerror、try/catch、 error 事件捕获到,可通过 unhandledrejection 事件来处理 示例: Vue 错误 Vue项目中,window.onerror 和 error 事件不能捕获到常规的代码错误 异常代码: 控制台会报错, window.onerror 和 error 不能捕获到 控制台打印:   errorHandler源码分析 在src/core/util目录下,有一个error.js文件 通过源码明白了,vue 使用 try/catch 来捕获常规代码的报错,被捕获的错误会通过 console.error 输出而避免应用崩溃 可以在 Vue.config.errorHandler 中将捕获的错误上报 子组件代码: 同vue项目的处理类似,react项目中,可以在 componentDidCatch 中将捕获的错误上报 跨域问题 如果当前页面中,引入了其他域名的JS资源,如果资源出现错误,error 事件只会监测到一个 script error 的异常。 示例: 报错信息: 添加 crossorigin 后可以捕获到完整的报错信息:    如果不能修改服务端的请求头,可以考虑通过使用 try/catch 绕过,将错误抛出 接口错误 接口监控的实现原理:针对浏览器内置的 XMLHttpRequest、fetch 对象,利用 AOP 切片编程重写该方法,实现对请求的接口拦截,从而获取接口报错的情况并上报 1)拦截XMLHttpRequest请求示例: 2)拦截fetch请求示例:   错误捕获方式主要摘抄自:https://juejin.cn/post/7172072612430872584#heading-10,主要用来记录和学习,也推荐大家看看原博主的文章。 前端开发中的Error 参考链接:https://www.imooc.com/article/details/id/294329

友情链接:

Powered by TKP 中文站 @2013-2022 RSS地图 HTML地图

Copyright Powered by365站群 © 2013-2024