前端錯誤捕獲

原文鏈接:https://blog.csdn.net/qq_26702033/article/details/79863485

原文鏈接: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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章