25

我正在研究通过 Javascript 自动检测页面错误的可能性。我发现了几个问题,其中的答案允许您通过 全局捕获 Javascript 编译和运行时错误window.onerror,但没有答案提及浏览器错误控制台中经常报告的其他类型的非 Javascript 错误。我主要对网络错误(无效 URI、SSL 错误、HTTP 错误、超时)和资源解释错误(类型不匹配导致资源解释中止、加载资源解析错误等)感兴趣。

我检查了该performance.getEntries方法,但我很困惑地发现它似乎不包含导致错误的网络请求(我仅在 Chrome 29 中检查...)

我不需要完全的跨浏览器兼容性..只要它适用于某些浏览器并且不会破坏其他浏览器,就可以了。

4

2 回答 2

2

该处理程序在Chrome 13+、Firefox 6.0+、Internet Explorer 5.5+、Opera 11.60+ 和 Safari 5.1+window.onerror中捕获 Javascript 错误。StackOverflow上已经有一个非常好的答案,它提供了很多关于它的信息。但是,它不会捕获加载资源的失败。

其他元素(例如图像)而言,jQuery 提供了.error()一种附加错误事件处理程序的方法,以在图像或外部脚本加载失败时提醒用户。如果您不能使用 jQuery,那么另一种选择是通过预加载所有图像/外部资源XMLHttpRequest并侦听请求的status(HTTP 响应代码)(除此之外的任何内容,200 OK或者304 Not Modified是您想要返回错误的内容)。这样做的缺点是,由于必须在页面完全加载之前附加事件处理程序等,因此禁用 JavaScript 的任何人都将看到一个零散的、可能是空白的页面。

无效的 URI 和 HTTP 错误最好在服务器端处理。格式良好的.htaccess文件与 Apache mod_rewrite(或同等文件)相结合可以为对服务器的错误请求提供大量缓冲。

于 2013-09-30T16:14:37.580 回答
0

不,我还没有找到一种全球性的方法,也许除了服务人员。

(请注意,window.onerror仅捕获 Javascript 中抛出的错误,例如,它不会捕获从<script src="misspelling.js"></script>元素加载资源的失败。)

相反,您可以onerror为加载资源的每个元素添加一个属性,但您需要在服务器发送的 HTML 中执行此操作:

<script src="misspelling.js" onerror="alert('js')"></script>
<img src="misspelling.jpg" onerror="alert('img')">
<link rel="stylesheet" href="mispelling.css" onerror="alert('css')">

于 2020-10-07T11:46:43.023 回答