17-JavaScript-错误监控

  • 前端错误的分类
  • 错误的捕获方式
  • 上报错误的基本原理

1、前端错误的分类

  • 即时运行错误:代码错误
  • 资源加载错误

2、错误的捕获方式

即时运行错误捕获方式

1)try…catch 2)window.onerror

资源加载错误

1)object.onerror 2)performance.getEntries 3)Error事件捕获

  • 资源加载错误事件不会冒泡,只会在本身这个object报错事件进行响应
  • performace.getEntries()这个API获取所有资源的加载地址

17-JavaScript-错误监控 - 图1

  • Error事件捕获
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. </head>
  7. <body>
  8. <script type="text/javascript">
  9. window.addEventListener('error',function (e) {
  10. console.log('捕获',e);
  11. }, true);
  12. </script>
  13. <script src="/js/index.js" charset="utf-8"></script>
  14. </body>
  15. </html>

17-JavaScript-错误监控 - 图2

跨域资源加载错误
  1. 在script标签增加crossorigin属性(客户端错误)
  2. 设置JS资源响应头Access-Control-Allow-Origin:*(服务端做)

3、错误监控

  • 上报错误的基本原理
    • 使用Ajax通信进行上报
    • 利用Image对象上报
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title></title>
  6. </head>
  7. <body>
  8. <script type="text/javascript">
  9. window.addEventListener('error',function (e) {
  10. console.log('捕获',e);
  11. }, true);
  12. </script>
  13. <script src="/js/index.js" charset="utf-8"></script>
  14. <script type="text/javascript">
  15. let errors = 'imgerror';
  16. (new Image()).src = `http://www.kejiganhuo.com/test?error=${errors}`;
  17. </script>
  18. </body>
  19. </html>

17-JavaScript-错误监控 - 图3