国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS錯誤監控總結

wqj97 / 1424人閱讀

摘要:前言做好錯誤監控,將用戶使用時的錯誤日志上報,可以幫助我們更快的解決一些問題。一個變通方案是多帶帶處理,告知錯誤詳情僅能通過瀏覽器控制臺查看,無法通過訪問。

前言

做好錯誤監控,將用戶使用時的錯誤日志上報,可以幫助我們更快的解決一些問題。目前開源的比較好的前端監控有

https://docs.sentry.io/

那前端監控是怎么實現的呢?要想了解這個,需要知道前端錯誤大概分為哪些以及如何捕獲處理。

前端錯誤分為JS運行時錯誤、資源加載錯誤和接口錯誤三種。

一、JS運行時錯誤

JS運行時錯誤一般使用window.onerror捕獲,但是有一種特殊情況就是promise被reject并且錯誤信息沒有被處理的時候拋出的錯誤

1.1 一般情況的JS運行時錯誤

使用window.onerror和window.addEventListener("error")捕獲。其中window.onerror含有詳細的error信息(error.stack),而且兼容性更好,所以一般JS運行時錯誤使用window.onerror捕獲處理

window.onerror = function (msg, url, lineNo, columnNo, error) 
    { 
       // 處理error信息
    } 
 
    window.addEventListener("error", event =>  
    {  
       console.log("addEventListener error:" + event.target); 
    }, true); 
    // true代表在捕獲階段調用,false代表在冒泡階段捕獲。使用true或false都可以
例子:https://jsbin.com/lujahin/edit?html,console,output 點擊button拋出錯誤,分別被window.onerror和window.addEventListener("error")捕獲
1.2 Uncaught (in promise)

當promise被reject并且錯誤信息沒有被處理的時候,會拋出一個unhandledrejection,并且這個錯誤不會被window.onerror以及window.addEventListener("error")捕獲,需要用專門的window.addEventListener("unhandledrejection")捕獲處理

window.addEventListener("unhandledrejection", event => 
    { 
       console.log("unhandledrejection:" + event.reason); // 捕獲后自定義處理
    });
https://developer.mozilla.org...
例子:https://jsbin.com/jofomob/edit?html,console,output 點擊button拋出unhandledrejection錯誤,并且該錯誤僅能被window.addEventListener("unhandledrejection")捕獲
1.3 console.error

一些特殊情況下,還需要捕獲處理console.error,捕獲方式就是重寫window.console.error

var consoleError = window.console.error; 
window.console.error = function () { 
    alert(JSON.stringify(arguments)); // 自定義處理
    consoleError && consoleError.apply(window, arguments); 
};
例子:https://jsbin.com/pemigew/edit?html,console,output
1.4 特別說明跨域日志

什么是跨域腳本error??

https://developer.mozilla.org...
當加載自不同域的腳本中發生語法錯誤時,為避免信息泄露(參見bug 363897),語法錯誤的細節將不會報告,而代之簡單的"Script error."。在某些瀏覽器中,通過在
閱讀需要支付1元查看
<