为什么要进行前端的错误进行监控
- 现在网页的要求已经趋近于原生的应用,几乎都是有着大量交互的。面对各种用户,不同的浏览器等等出现的不同问题,有必要进行及时的监控,毕竟有些问题复现也是挺困难的。
捕获错误的方法
- try..catch 之前说过,但是它只能在 try 的块里运行才可以捕捉错误,无法捕捉全局的错误事件
- window.onerror 可以用来捕捉全局的错误,但是它无法捕捉异步错误,我们在 ajax 模块统一埋点
window.onerror
1 | window.onerror=function(message,url,linNo,columnNo,error) |
常见问题
Script Error
现在我们一般都把资源放在 cdn 上,其他资源在本页面相当于跨域为什么会有这种设置,这是避免数据泄露到不安全的域中。如果我是银行页面,随便引入一个 js 资源,读取了账户密码,那可如何是好。
解决手段
添加信任的域
- 客户端的 script 添加 crossorigin,他的作用就是告诉浏览器,要加载一个其他域的资源,并且信任他
- 服务端设置Acess-Control-Allow-Origin的响应头,可以直接设置为*,信任全部资源。cdn 资源应该全部加上 CORS 响应头。
如果我们使用 nginx 的话,可以像下面那样简单配置
1 | location / { |
代码压缩
现代 web 工程都会直接压缩 js 代码,所以线上一般都是只有几行代码但是我们有 sourcemap,可以定位到源代码的位置。但是线上是没有这个东西,我们可以通过sourcemap这个工具来将压缩后的代码生成 sourcemap
- 这里简单介绍一下生成 sourcemap 文件的方式
1 | uglifyjs --source-map 最终生成的map名称 --output 压缩文件名称 原文件名称 |
- 简单通过 soucemap 定位到源文件的真正行数
1 | let sourceMap = require("source-map"); |
推荐工具
由以上可以简单知道前端收集的原理了,但真正到线上肯定是不够的,这里有一些成熟的工具
分享一篇干货如何设计一个前端监控系统