是否有一种全局方法来捕获javascript中的网络错误

时间:2013-09-30 15:47:09

标签: javascript error-detection

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

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

我不需要完全跨浏览器兼容性..只要它适用于某些浏览器,并且不会破坏其他浏览器,那很好。

2 个答案:

答案 0 :(得分:2)

window.onerror处理程序适用于 Chrome 13 +,Firefox 6.0 +,Internet Explorer 5.5 +,Opera 11.60+和Safari 5.1 +。已经有really good answer on StackOverflow个提供了大量有关它的信息。

其他元素(例如图像)而言,jQuery提供了一个.error()方法来附加错误事件处理程序,以便在图像或外部脚本无法通知时向用户发出警报加载。如果你不能使用jQuery,那么另一种选择是通过XMLHttpRequest预加载所有图像/外部资源并监听请求的status(HTTP响应代码)({{1除外)或200 OK是你想要返回错误的东西)。这样做的缺点是,由于事件处理程序等必须在页面完全加载之前附加,因此禁用JavaScript的任何人都将看到一个碎片化的,可能是空白的页面。

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

答案 1 :(得分: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')">