Angular 11应用突发zone.js报错t.getElementsByTagName is not a function求解
根因定位
报错来自你项目依赖的@sentry/* 6.x旧版本,computeStackTrace.js是Sentry用于堆栈追踪的核心文件。触发原因是近期各大主流浏览器版本更新后,MutationObserver回调返回的节点列表包含了非Element类型的节点(比如文本节点、注释节点),你使用的6.7.x版本Sentry未做节点类型校验,直接对所有节点调用getElementsByTagName方法,而非Element节点不存在该方法,因此抛出类型错误。
该问题和Angular版本无关,因此你升级Angular 12后报错依旧存在。
解决方案
临时紧急修复(无需升级依赖,改完立即生效)
在Sentry初始化配置中禁用MutationObserver相关监听:
Sentry.init({ // 保留你的其他原有配置 integrations: [ new Sentry.Integrations.TryCatch({ MutationObserver: false }) ] })
修改后重新构建发布即可快速恢复业务,不会影响Sentry其他错误上报能力。
永久修复
将所有@sentry/开头的依赖统一升级到6.x系列的最新稳定版(≥6.19.7),或者7.x的长期支持版本,Sentry官方已在后续版本中补充了节点类型校验逻辑,彻底修复了该问题。升级完成后重新构建发布即可。
验证方法
你可以在本地浏览器控制台中禁用Sentry相关脚本加载,刷新页面后如果报错消失,即可确认根因判断正确。
内容的提问来源于stack exchange,提问作者Yoh
相关产品推荐
相关产品推荐

