怎么全局注册不知道,但我遇到过一个坑比用 window.onerror=function(){return true;}
屏蔽了所有的报错,仅仅是为了交付的时候不让甲方看到控制台有报错 …… 那么顺着这个思路可以将所有的脚本报错都集中到这个函数里,然后识别所需处理的错误再进行处理就可以了。一个优点就是写着简单。缺点有点多:1. 其他的所有 try catch
都没用了(直接在控制台抛错是可以 catch
的,但这没有实际用途);2. 跨域脚本需要允许跨域不然不知道报错的细节;3. 貌似还有兼容性的问题。
上面一个是真·通用的错误拦截方案,针对HTTP
请求,有一种思路就是重写请求相关的 API
,大致需要重写 XMLHttpRequest.prototype.error
、 XMLHttpRequest.prototype.onerror
、 XMLHttpRequest.prototype.addEventListener
、 window.fetch
,优点就是不影响其他错误的正常抛出,一个缺点就是需要写的地方太多了(我可能还没有列完整,比如还有 ActivexObject
)。
如果全局使用了 axios
的话,就可以通过重写其相关方法或者添加拦截器的方式拦截 HTTP
请求的错误 ,优点还是写得少,缺点就是只能针对 axios
实现,不过在实际应用中又推荐这种方法,因为一个(没有历史包袱的)项目的技术选型定下来了之后应该不太会变动,写第一次就可以了。
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…