如何为index.html添加全局的错误捕获与提示:HTML前端监控

浅墨君_8252

浅墨君_8252

2026-06-04

959人浏览

原创

window.onerror不捕获promise拒绝错误,因其仅监听js运行时同步及异步任务(如settimeout、事件回调)抛出的错误,而promise.reject未被处理时触发的是独立的unhandledrejection事件,由微任务队列派发,与onerror的错误机制完全隔离。

如何为index.html添加全局的错误捕获与提示:html前端监控

为什么 window.onerror 不捕获 Promise 拒绝错误

直接写 window.onerror = () => {...} 只能捕获同步脚本错误、资源加载失败(如 JS 文件 404)等,但对 Promise.reject() 或未 await 的异常完全无感——浏览器把这类错误归为“unhandledrejection”,需要单独监听。

实际场景中,一个 fetch 失败没 catch,或组件里 useEffect 中的异步逻辑抛错,用户界面卡住却无提示,就是漏掉了这个监听点。

  • 必须同时注册 window.addEventListener('error')window.addEventListener('unhandledrejection')
  • unhandledrejectionevent.reason 可能是 Error 实例,也可能是字符串或普通对象,需做类型判断
  • 在现代打包环境下(如 Vite / Webpack),source map 未部署时,error.filename 常是 bundle.js,行号也失真,别依赖它定位源码

如何用 alert() 做最小可行错误提示(仅开发/测试用)

上线前快速验证监控是否生效,最直白方式就是弹 alert()。但它会中断执行流、阻塞后续 JS,**绝不能用于生产环境**。

示例代码可直接粘贴到 index.html<script></script> 标签内:

Doc To HTML
Doc To HTML

使用 MinerU 文档处理引擎将 Word 文档(.doc、.docx)转换为保留结构和格式的干净 HTML。

下载
window.addEventListener('error', event => {
  alert(`JS Error: ${event.message}\n@ ${event.filename}:${event.lineno}`);
});
window.addEventListener('unhandledrejection', event => {
  const reason = event.reason instanceof Error 
    ? event.reason.message 
    : String(event.reason);
  alert(`Promise Rejected: ${reason}`);
});
  • 注意:两次 alert() 会连续弹出,可能被浏览器拦截(尤其 Safari)
  • 若页面已引入框架(如 React),event.filename 多数时候是空字符串,得靠 event.error?.stack 辅助判断
  • 这种写法不兼容 IE,但 IE 已无实际维护价值,无需降级

生产环境该用什么方式上报错误

真实项目里,错误要发到后端聚合服务(如 Sentry、LogRocket,或自建接口),而不是弹窗或 console。

关键约束条件:fetch 上报本身不能引发新错误,且需避免重复上报(比如一个错误触发 error + unhandledrejection 两次)。

  • 上报前加防抖:用 setTimeout 延迟 100ms,合并短时间内的同类错误
  • navigator.sendBeacon() 替代 fetch,确保页面卸载(如用户关闭标签页)时仍能发出请求
  • 上报 payload 至少包含:event.type('error' / 'unhandledrejection')、event.messageevent.stack(如有)、location.hrefnavigator.userAgent
  • 禁止上报 event.error 整个对象——它含函数引用,JSON.stringify 会静默丢弃,且可能泄漏敏感上下文

为什么 script 标签位置影响错误捕获范围

把监控脚本放在 最顶部,才能捕获后续所有 inline script 和外部 JS 加载过程中的语法错误(如 <script>const a = ;</script>)。

如果监控代码写在 底部,那么上面所有 JS 执行期间发生的错误,都已在监控挂载前丢失。

  • 正确写法:<script>...监控逻辑...</script>
  • 若使用模块化构建(如 Vite),确保入口 JS(如 main.ts)的第一行就注册监听,而非等 DOMContentLoaded 后
  • 动态插入的 script(如广告 SDK、统计代码)仍可被捕获,前提是它们执行时监听器已存在
全局错误监控不是加两行代码就完事的事。真正难的是区分哪些错误该忽略(如用户禁用图片导致的 img.onerror)、哪些要聚类去重、以及怎么在不拖慢首屏的前提下完成采集与上报。这些细节往往藏在灰度发布后的日志里,而不是文档开头。

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2063

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

4383

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5490

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

4938

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

703

5

html版权符号
html版权符号

html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

4915

7

html在线编辑器
html在线编辑器

html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

2023.06.21

2872

4

html网页制作
html网页制作

html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.31

2530

5

html空格
html空格

html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.01

2559

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
GDB 17.2 官方文档集合
GDB 17.2 官方文档集合

共0课时 | 0人学习

Bootstrap 入门安装配置
Bootstrap 入门安装配置

共0课时 | 0人学习

38+ PhpStorm 提示和技巧
38+ PhpStorm 提示和技巧

共1课时 | 206人学习