Javascript 錯誤處理的幾種方法
網(wǎng)站建設哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、小程序設計、集團企業(yè)網(wǎng)站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了印臺免費建站歡迎大家使用!
1.使用window.onerror指定錯誤處理函數(shù)。
當有錯誤的時候,onerror會被callback。 當某個JavaScript block中有多個script錯誤時,第一個錯誤觸發(fā)后(回調(diào)callback),當前Javascript block后面的script會被自動Drop忽略掉,不被執(zhí)行。
如:
代碼如下:
html xmlns=""
head
titleTest/title
script type="text/javascript"
window.onerror = function(message, url, line)
{
alert("Error.\nMessage:"+ message +"\nUrl:" + url + "\nLine:" + line)
return true;
}
/script
/head
body
script type="text/javascript"
test();
test();
test();
test();
/script
script type="text/javascript"
test();
test();
test();
test();
/script
/body
/html
在上面的例子中只會有每一個block中的第一個test();產(chǎn)生error。觸發(fā)window.onerror回調(diào),后面的Javascript會被忽略掉。img 也支持 onerror img src="pic.gif" onerror = "javascript:alert("An error occurred.");"/。onerror 是瀏覽器支持的對象。由瀏覽器決定是否可以使用,不是DOM標準。
2.使用Javascript中的try catch throw處理異常。
Javascript支持了try catch throw,Javascript中定義的異常:
(1)EvalError: An error occurs in the eval() function.
(2)RangeError: A number value is greater then or less then the number that can be represented in Javascript(Number.MAX_VALUE and Number.MIN_VAKUE).
(3)ReferenceError: An illegal reference is used.
(4)SyntaxError: A syntax error occus inside of an eval() function call. All other syntax error are reorted by the browser and cannot be handled with a try...catch statement.
(5)TypeError. A variables type is unexpected. 6.URIError. An error ocuurs in the encodeURI() or the decodeURI() function.
如:
代碼如下:
script type="text/javascript"
function CreateError()
{
throw new Error("Created error by custom.");
}
try
{
//throw a error from a function just want to see the call stack in firefox.
CreateError();
}
catch(error)
{
var errorMsg = ("Message: " + error.message + "\n");
if(typeof(error.stack)!=undefined)
{
//FF
errorMsg += ("Line Number: " + error.lineNumber + "\n");
errorMsg += ("File Name: " + error.fileName + "\n");
errorMsg += ("Stack Trace:\n" + error.stack + "\n");
}
else
{
//IE
errorMsg += ("Description: " + error.description + "\n");
errorMsg += ("Number: " + error.number + "\n");
}
alert(errorMsg);
}
finally
{
//alert("End try catch.message from finally block.");
}
/script
Error.message是IE和FireFox都支持的屬性。
IE支持description 和 number屬性。
FF支持fileName lineNumber 和 stack 屬性。
由于Javascript是弱類型的語言。
所以在catch部分只能catch一次,不能像C#這樣的語言可以寫多個catch,catch不同類型的exception。
但是可以用 instanceof ErrorType的方式實現(xiàn)類似的功能。
如:
代碼如下:
script type="text/javascript"
try
{ //Syntax Error
//eval("alert a");
//Custom Error
throw new Error("An error occured.");
}
catch(error)
{
if(error instanceof SyntaxError)
{
alert("Syntax Error");
}
else if(error instanceof EvalError)
{
alert("Eval Error");
}
else if(error instanceof RangeError)
{
alert("Range Error");
}
else if(error instanceof ReferenceError)
{
alert("Reference Error");
}
else if(error instanceof TypeError)
{
alert("Type Error");
}
else if(error instanceof Error)
{
alert("Custon Error");
}
alert(error.message);
}
/script
注:瀏覽器不會拋出Error類型的exception異常,所以如果捕獲到Error類型的異常,可以確定這個異常是用戶代碼拋出的,不是瀏覽器拋出的。
Javascript的assert()
代碼如下:
function assert(bCondition, sErrorMsg) {
if (!bCondition) {
alert(sErrorMsg);
throw new Error(sErrorMsg);
}
}
JavaScript編程開發(fā)語言可以說是大部分程序員都需要掌握的一種編程語言,而今天我們就一起來了解一下,在使用JavaScript編程的時候都有哪些常見的錯誤問題。
1.UncaughtTypeError:Cannotreadproperty
如果你是一個JavaScript開發(fā)人員,可能你看到這個錯誤的次數(shù)比你敢承認的要多(LOL?)。當你讀取一個未定義的對象的屬性或調(diào)用其方法時,這個錯誤會在Chrome中出現(xiàn)。您可以很容易的在Chrome開發(fā)者控制臺中進行測試(嘗試)。
2.TypeError:‘undefined'isnotanobject
這是在Safari中讀取屬性或調(diào)用未定義對象上的方法時發(fā)生的錯誤。您可以在SafariDeveloperConsole中輕松測試。這與1中提到的Chrome的錯誤基本相同,但Safari使用了不同的錯誤消息提示語。
3.TypeError:nullisnotanobject
這是在Safari中讀取屬性或調(diào)用空對象上的方法時發(fā)生的錯誤。您可以在SafariDeveloperConsole中輕松測試。
4.(unknown):Scripterror
當未捕獲的JavaScript錯誤(通過window.onerror處理程序引發(fā)的錯誤,而不是捕獲在try-catch中)被瀏覽器的跨域策略限制時,會產(chǎn)生這類的腳本錯誤。
5.TypeError:Objectdoesn'tsupportproperty
這是您在調(diào)用未定義的方法時發(fā)生在IE中的錯誤。您可以在IE開發(fā)者控制臺中進行測試。
6.TypeError:‘undefined'isnotafunction
當您調(diào)用未定義的函數(shù)時,這是Chrome中產(chǎn)生的錯誤。麗江電腦培訓認為您可以在Chrome開發(fā)人員控制臺和MozillaFirefox開發(fā)人員控制臺中進行測試。
7.UncaughtRangeError:Maximumcallstack
這是Chrome在一些情況下會發(fā)生的錯誤。一個是當你調(diào)用一個不終止的遞歸函數(shù)。您可以在Chrome開發(fā)者控制臺中進行測試。
這是網(wǎng)頁程序的問題,經(jīng)常發(fā)生于網(wǎng)頁的html代碼的編寫錯誤以及javascript、vbscript腳本代碼未通過瀏覽器的檢測而發(fā)出這樣的提示,只要不影響正常的頁面瀏覽就不必在意。如果影響了頁面的功能使用,建議將頁面刷新重新嘗試并檢測瀏覽器的安全設置、清除歷史文件后再重新登陸頁面。
1卸載迅雷軟件
2卸載流氓軟件(比如 360 騰訊管家 等)
3用火絨安全軟件的系統(tǒng)修復功能來嘗試幫你修復
原因分析如下:
一、一般在什么情況下容易彈出javascripterror提示框
1、從網(wǎng)上采集到的文章,但在前臺打開后,就出現(xiàn)這個錯誤框!
2、圖片內(nèi)容頁的幻燈片不播放,點播放就出現(xiàn)JAVA錯誤!
3、只在頻道首頁、欄目列表頁和內(nèi)容頁有這樣的錯誤!
4、從其它網(wǎng)站復制粘貼過來的圖片文章經(jīng)常出現(xiàn)這樣的錯誤!
5、新添加頻道和欄目之后,容易出現(xiàn)這樣的錯誤!
6、調(diào)用自定義函數(shù)標簽時出現(xiàn)Javascript錯誤!
7、修改模板把搜索按鈕改成圖片后提示:javascripterror
8、在模板中加入了JS調(diào)用代碼,而JS文件并沒有上傳也會出現(xiàn)這個錯誤!
二、出現(xiàn)javascripterror提示框原因分析及解決方法
1、由于新安裝好的網(wǎng)站或者新添加的頻道或欄目,有些系統(tǒng)必需的JS文件并沒有真正生成,這時添加文章在前臺會出錯,所以要在后臺相應的頻道中點擊“刷新所有的JS”、“刷新專題JS文件”、“刷新欄目JS文件”;有些人以為,我沒有添加專題就不用刷新專題JS了吧?錯!必須也要刷新才行。
2、一般是修改模板時,JS調(diào)用代碼多了或者少了就會出現(xiàn)這個討厭的框。比如:模板中存在過期的廣告調(diào)用JS調(diào)用代碼,刪除后即正常。還有的是因為模板中缺少了以下三個JS中的某一個而引起的錯誤:
3、有些是從其他網(wǎng)站復制過來的文章的js錯誤導致的。建議復制文章后放在記事本中過濾一下JS代碼?;蛘咝薷某霈F(xiàn)錯誤的那篇文章,在源碼狀態(tài)下,查找并刪除圖片文章中包含的錯誤代碼。
4、缺少相應的函數(shù),所以調(diào)用時就一直顯示錯誤。有的朋友以前在修改模板時,把官方默認的一些代碼(如:圖片無級縮放代碼等)給刪除了,結果也會出現(xiàn)JS錯誤。所以,動易后來把這些代碼改成了刪除后自動添加的,其目的就是減少JS錯誤。
5、常常是由于js文件沒有上傳成功或者你的瀏覽器版本過低或者限制過多造成的,從以上幾個方面多檢查一下或許能解決問題。
6、有些是傳遞的參數(shù)設定有問題。比如(('{$ArticleID}'))不需要加這么多的外包圍。
只需要用{$ArticleID}就可以了!
7、在建立欄目或?qū)n}時,名稱中包含了半角引號等非法字符而導致JS腳本錯誤,糾正之后即可解決。
8、采集項目如果過濾設置不正確,致使采集過來的一些文章JS腳本沒有被過濾,也會出錯。請重新設置采集過濾選項。