我正在研究通过Javascript自动进行页面错误检测的可能性。我找到了几个问题,答案允许您通过window.onerror
全局捕获Javascript编译和运行时错误,但没有答案提到浏览器错误控制台中经常报告的其他类型的非Javascript错误。我主要对网络错误(无效的URI,SSL错误,HTTP错误,超时)和资源解释错误(不匹配类型导致中止资源解释,解析加载资源上的错误等)感兴趣。
我检查了performance.getEntries
方法,但我很困惑地发现它似乎没有包含导致错误的网络请求(我只在Chrome 29中检查过......)
我不需要完全跨浏览器兼容性..只要它适用于某些浏览器,并且不会破坏其他浏览器,那很好。
答案 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')">