原文鏈接:https://blog.csdn.net/qq_26702033/article/details/79863485
前端錯誤的分類:
及時運行錯誤:代碼錯誤;
資源加載錯誤;
及時運行錯誤的捕獲方式:
- try-catch
- window.onerror,註冊window.onerror事件。
window.onerror = function(){}
1
資源加載錯誤:
-object.onerror,不能在冒泡階段實現。
- performance.getEntries();
performance.getEntries().forEach(item=>{console.log(item.name)})
1
Error事件捕獲
window.addEventListener('error',function(e){console.log('捕獲',e)},true)
1
跨域的js運行錯誤可以捕獲嗎?錯誤提示什麼?應該怎樣處理?
可以捕獲,但是也只會提示script error。
這時候應該採取兩個方法:
1.客戶端:在script標籤增加crossorigin屬性;
<script src="http://7.url.cn/index.js" crossorigin></script>
1
2.服務端:設置js資源響應頭在腳本文件的 HTTP response header 中設置 CORS
比如: Access-Control-Allow-Origin: http://yuncaijing.com
上報錯誤?
1.採用ajax通信上報;
2.利用image對象上報;
new Image().src = 'http://www.baidu.com/?r=1';
1
這時候發現請求發送出去了。
如果我們想要將js的錯誤信息記錄到服務器數據庫庫中,我們一般想到的是通過ajax來實現。
其實這樣做有幾個弊端:
不支持跨域操作,因爲很多情況下是一臺服務器要負責處理多臺服務器的錯誤;
大多數Ajax通信都是通過javascript庫提供的包裝函數來處理,如果庫代碼本身就有問題, 而你還在依賴該庫記錄信息,可想而知,錯誤消息是不肯能得到記錄的。
怎麼辦?
可以使用Image對象巧妙的解決這個問題。
function logError(sev, msg){
var img = new Image();
img.src = “log.php?sev=” + encodeURIComponent(sev) +
“&msg=” + encodeURIComponent(msg)”;
}
作者:nummy
鏈接:https://www.jianshu.com/p/3bc73971e3b3
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
————————————————
版權聲明:本文爲CSDN博主「qq_26702033」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_26702033/article/details/79863485