溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

javascript全局錯誤的處理方法

發布時間:2021-04-20 14:39:03 來源:億速云 閱讀:504 作者:小新 欄目:web開發

這篇文章主要介紹了javascript全局錯誤的處理方法,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

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 引擎會中斷后續代碼執行,并生成一個錯誤消息。為了使代碼更健壯,避免代碼意外中斷,我們需要處理各種異常。

1、局部錯誤處理

局部錯誤處理指代碼可能出錯的地方進行錯誤捕捉處理,需要程序猿進行硬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高級教程】

2、全局錯誤處理

由于前端開發人員水平不一、代碼規范程度不一,不是所有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,用全局錯誤來捕捉,代碼如下圖:

javascript全局錯誤的處理方法
控制臺輸出:
javascript全局錯誤的處理方法

3、錯誤上報模塊設計

全局錯誤處理并不能阻塞代碼意外終止,也就是說當js執行過程中報錯又沒有try-catch錯誤處理,則會調用globalErrorHandle,但是后續代碼會意外終止不再執行。因此,全局錯誤處理更多是全局錯誤記錄并上報。通常做3個事情:

  • globalErrorHandle,全局錯誤捕捉;

  • 將錯誤信息上報到服務器(報錯頁面、行號、列號等);

  • 管理員在服務器上發現js錯誤信息時,責令相關人員修改;

看個案例,截圖如下:

javascript全局錯誤的處理方法
上圖就是一個簡單的js錯誤上報模塊,錯誤查看頁面,信息包括:錯誤源(哪個頁面),錯誤描述,行號,操作系統+瀏覽器,操作人,操作時間等。

有幾個注意事項:

1)上報內容過濾

如上圖所示,好多錯誤信息都是一樣的,如果在某個大循環里不斷的在觸發錯誤,則會不斷向服務器發送錯誤信息,因此錯誤信息發送前先做過濾,操作如下:

  • 頁面加載時,先獲取 錯誤源+錯誤描述 hashcode 去重列表;

  • 全局錯誤捕捉時,生成的錯誤源+錯誤描述 hashcode是否已經存在,不存在則上報錯誤消息;

2)上報哪些內容

為了錯誤重現,建議盡可能使錯誤信息詳細,至少應包含:

  • 錯誤頁面url

  • 錯誤描述、錯誤行號、列號、stack信息

  • 瀏覽器和操作系統信息

  • 操作時間,甚至操作人、參數

感謝你能夠認真閱讀完這篇文章,希望小編分享的“javascript全局錯誤的處理方法”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女