這篇文章主要介紹了javascript全局錯誤的處理方法,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
JavaScript是一種直譯式的腳本語言,其解釋器被稱為JavaScript引擎,是瀏覽器的一部分,JavaScript是被廣泛用于客戶端的腳本語言,最早是在HTML網頁上使用,用來給HTML網頁增加動態功能。
在JavaScript中,可以通過綁定“window.onerrot”事件來進行頁面全局error錯誤處理,語法格式“function 函數名(msg,url,l,c,error){//代碼} window.onerror = 函數名;”。
本教程操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。
JavaScript引擎執行JavaScript代碼時,會發生各種錯誤:可能是語法或拼寫錯誤,可能是瀏覽器差異(使用了瀏覽器特有功能),也可能是服務器返回異常未處理,當然還有許多其它不可預知的因素。當錯誤發生時,JavaScript 引擎會中斷后續代碼執行,并生成一個錯誤消息。為了使代碼更健壯,避免代碼意外中斷,我們需要處理各種異常。
局部錯誤處理指代碼可能出錯的地方進行錯誤捕捉處理,需要程序猿進行硬code,JavaScript錯誤處理相關有4條語句:
1)try, catch語句,錯誤捕捉語句
2)finall語句,錯誤捕捉處理后,return前制執行語句
3)throw語句,錯誤拋出語句
案例1:
try {
window.abcdefg();
} catch (e) {
alert('發生錯誤啦,錯誤信息為:' e.message);
} finally {//總是會被執行
alert('我都會執行!');
}控制臺輸出:
發生錯誤啦,錯誤信息為: window.abcdefg is not a function
我都會執行
finally語句在catch后,return前執行。
案例2
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Throw Demo</title>
</head>
<body>
<script>
function myFunction()
{
try
{
var x=document.getElementById("demo").value;
if(x=="") throw "不能為空";
if(isNaN(x)) throw "不是有效數字";
if(x>10) throw "不能大于10";
if(x<5) throw "不能小于5";
} catch(err) {
var y=document.getElementById("mess");
y.innerHTML="Error: " + err + ".";
}
}
</script>
<p>請輸入一個5到10的數字:</p>
<input id="demo" type="text">
<button type="button" onclick="myFunction()">Test Input</button>
<p id="mess"></p>
</body>
</html>throw的作用就是將可預見或不可預見的錯誤轉義成用戶可認知的錯誤。
【推薦學習:javascript高級教程】
由于前端開發人員水平不一、代碼規范程度不一,不是所有JavaScript代碼都有錯誤處理。因此,JavaScript代碼在執行過程中常常會因為不可預見異常而導致代碼意外終止,為此,我們需要全局捕捉錯誤異常,并及時提醒開發人員修改代碼。只要綁定window.onerrot事件即可進行頁面全局js error錯誤處理,代碼如下:
function globalErrorHandle(msg,url,l,c,error) {
console.error("global js error: ", msg, l);
// TODO other things.
}
window.onerror = globalErrorHandle;綁定window.onerrot事件,js報錯就會調用globalErrorHandle,其中:
msg:錯誤消息
url:報錯頁面url
l:代碼報錯行號
c: 列號
error: 錯誤對象
把上文的案例1,用全局錯誤來捕捉,代碼如下圖:

控制臺輸出:
全局錯誤處理并不能阻塞代碼意外終止,也就是說當js執行過程中報錯又沒有try-catch錯誤處理,則會調用globalErrorHandle,但是后續代碼會意外終止不再執行。因此,全局錯誤處理更多是全局錯誤記錄并上報。通常做3個事情:
globalErrorHandle,全局錯誤捕捉;
將錯誤信息上報到服務器(報錯頁面、行號、列號等);
管理員在服務器上發現js錯誤信息時,責令相關人員修改;
看個案例,截圖如下:

上圖就是一個簡單的js錯誤上報模塊,錯誤查看頁面,信息包括:錯誤源(哪個頁面),錯誤描述,行號,操作系統+瀏覽器,操作人,操作時間等。
有幾個注意事項:
1)上報內容過濾
如上圖所示,好多錯誤信息都是一樣的,如果在某個大循環里不斷的在觸發錯誤,則會不斷向服務器發送錯誤信息,因此錯誤信息發送前先做過濾,操作如下:
頁面加載時,先獲取 錯誤源+錯誤描述 hashcode 去重列表;
全局錯誤捕捉時,生成的錯誤源+錯誤描述 hashcode是否已經存在,不存在則上報錯誤消息;
2)上報哪些內容
為了錯誤重現,建議盡可能使錯誤信息詳細,至少應包含:
錯誤頁面url
錯誤描述、錯誤行號、列號、stack信息
瀏覽器和操作系統信息
操作時間,甚至操作人、參數
感謝你能夠認真閱讀完這篇文章,希望小編分享的“javascript全局錯誤的處理方法”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。