十年網站開發(fā)經驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網站問題一站解決
這篇文章主要介紹了javascript全局錯誤的處理方法,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
成都創(chuàng)新互聯是專業(yè)的日喀則網站建設公司,日喀則接單;提供網站設計、網站建設,網頁設計,網站設計,建網站,PHP網站建設等專業(yè)做網站服務;采用PHP框架,可快速的進行日喀則網站開發(fā)網頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網站,專業(yè)的做網站團隊,希望更多企業(yè)前來合作!
JavaScript是一種直譯式的腳本語言,其解釋器被稱為JavaScript引擎,是瀏覽器的一部分,JavaScript是被廣泛用于客戶端的腳本語言,最早是在HTML網頁上使用,用來給HTML網頁增加動態(tài)功能。
在JavaScript中,可以通過綁定“window.onerrot”事件來進行頁面全局error錯誤處理,語法格式“function 函數名(msg,url,l,c,error){//代碼} window.onerror = 函數名;”。
本教程操作環(huán)境:windows7系統(tǒng)、javascript1.8.5版、Dell G3電腦。
JavaScript引擎執(zhí)行JavaScript代碼時,會發(fā)生各種錯誤:可能是語法或拼寫錯誤,可能是瀏覽器差異(使用了瀏覽器特有功能),也可能是服務器返回異常未處理,當然還有許多其它不可預知的因素。當錯誤發(fā)生時,JavaScript 引擎會中斷后續(xù)代碼執(zhí)行,并生成一個錯誤消息。為了使代碼更健壯,避免代碼意外中斷,我們需要處理各種異常。
局部錯誤處理指代碼可能出錯的地方進行錯誤捕捉處理,需要程序猿進行硬code,JavaScript錯誤處理相關有4條語句:
1)try, catch語句,錯誤捕捉語句
2)finall語句,錯誤捕捉處理后,return前制執(zhí)行語句
3)throw語句,錯誤拋出語句
案例1:
try { window.abcdefg(); } catch (e) { alert('發(fā)生錯誤啦,錯誤信息為:' e.message); } finally {//總是會被執(zhí)行 alert('我都會執(zhí)行!'); }
控制臺輸出:
發(fā)生錯誤啦,錯誤信息為: window.abcdefg is not a function
我都會執(zhí)行
finally語句在catch后,return前執(zhí)行。
案例2
Throw Demo 請輸入一個5到10的數字:
throw的作用就是將可預見或不可預見的錯誤轉義成用戶可認知的錯誤。
【推薦學習:javascript高級教程】
由于前端開發(fā)人員水平不一、代碼規(guī)范程度不一,不是所有JavaScript代碼都有錯誤處理。因此,JavaScript代碼在執(zhí)行過程中常常會因為不可預見異常而導致代碼意外終止,為此,我們需要全局捕捉錯誤異常,并及時提醒開發(fā)人員修改代碼。只要綁定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執(zhí)行過程中報錯又沒有try-catch錯誤處理,則會調用globalErrorHandle,但是后續(xù)代碼會意外終止不再執(zhí)行。因此,全局錯誤處理更多是全局錯誤記錄并上報。通常做3個事情:
globalErrorHandle,全局錯誤捕捉;
將錯誤信息上報到服務器(報錯頁面、行號、列號等);
管理員在服務器上發(fā)現js錯誤信息時,責令相關人員修改;
看個案例,截圖如下:
上圖就是一個簡單的js錯誤上報模塊,錯誤查看頁面,信息包括:錯誤源(哪個頁面),錯誤描述,行號,操作系統(tǒng)+瀏覽器,操作人,操作時間等。
有幾個注意事項:
1)上報內容過濾
如上圖所示,好多錯誤信息都是一樣的,如果在某個大循環(huán)里不斷的在觸發(fā)錯誤,則會不斷向服務器發(fā)送錯誤信息,因此錯誤信息發(fā)送前先做過濾,操作如下:
頁面加載時,先獲取 錯誤源+錯誤描述 hashcode 去重列表;
全局錯誤捕捉時,生成的錯誤源+錯誤描述 hashcode是否已經存在,不存在則上報錯誤消息;
2)上報哪些內容
為了錯誤重現,建議盡可能使錯誤信息詳細,至少應包含:
錯誤頁面url
錯誤描述、錯誤行號、列號、stack信息
瀏覽器和操作系統(tǒng)信息
操作時間,甚至操作人、參數
感謝你能夠認真閱讀完這篇文章,希望小編分享的“javascript全局錯誤的處理方法”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯,關注創(chuàng)新互聯行業(yè)資訊頻道,更多相關知識等著你來學習!