2013-09-30 71 views
14

我研究通過JavaScript自動對網頁錯誤檢測的可能性,網絡錯誤全球方法。我發現了幾個問題,答案允許您通過window.onerror在全球範圍內捕獲Javascript編譯和運行時錯誤,但沒有回答提及通常在瀏覽器錯誤控制檯中報告的其他類型的非Javascript錯誤。我主要關心網絡錯誤(無效的URI,SSL錯誤,HTTP錯誤,超時)和資源解釋錯誤(導致中止資源解釋的錯誤類型,解析加載資源上的錯誤等)。有沒有在JavaScript中捕獲

我查了performance.getEntries方法,但我很困惑地發現,它似乎並沒有包含導致錯誤的網絡請求(我檢查僅適用於Chrome 29 ...)

我不需要全面的跨瀏覽器兼容性..只要它在某些瀏覽器上工作,並且不會打破其他瀏覽器,那很好。

+0

我認爲他們大多是不能用JavaScript來實現檢測只是警告,因爲給正常的結果。但是,您可能會將自己的處理程序添加到每個請求中並手動檢查這些內容。 – Bergi

回答

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預加載所有圖片/外部資源,並聽取了請求(任何比200 OK304 Not Modified其他的status(HTTP響應代碼)的東西,你會想返回一個錯誤)。缺點是,由於必須在頁面完全加載之前附加事件處理程序等,禁用了JavaScript的任何人都將查看碎片,可能爲空的頁面。

無效的URI和HTTP錯誤是最好的處理服務器端。 A-形成良好.htaccess文件,用Apache的mod_rewrite(或等同的)相結合,可壞請求給服務器提供大量的緩衝。

+0

不幸的是,第二段提到的方法根本不是全球性的,你將不得不重寫整個網站。由於URI無效並且永遠不會發送到服務器,所以無效的URI無法在服務器端處理。如果您擁有服務器,則可以監控HTTP錯誤,但如果您想檢查加載第三方資源的錯誤,則會發生什麼情況? –

+1

@FabioBeltramini:您無需重寫整個站點。你只需要截取到本地函數([示例](http://stackoverflow.com/questions/15768369/custom-xmlhttprequest-prototype-open))的所有調用的腳本前面加上它,手錶是被添加的所有資源到DOM。您可以動態添加錯誤處理程序而無需觸摸代碼。 – Bergi

+0

我不認爲你在這裏需要jQuery。您可以收聽