2016-11-01 63 views
0

我想在Javascript中處理運行時錯誤。但是我面臨一個問題。當我習慣了window.onerror函數時,我可以得到無誤的錯誤。但是我在定義的函數中定義了一個未定義的函數。我看不到任何異常。我在哪裏做錯了?在Javascript中處理運行時錯誤

這是我使用的代碼;

function errorHandler(message, url, line, column, error) { 
debugger  
var message = [ 
'Message: ' + message, 
'\nURL: ' + url, 
'\nLine: ' + line, 
'\nColumn: ' + column, 
]; 

} window.onerror =的ErrorHandler;

index.html code;

function exceptionTest() { 
     test(); 
    } 

exceptionTest()函數在我的代碼中定義。但測試函數未定義。我想得到關於那個未定義函數的錯誤。我怎樣才能做到這一點 ?它只顯示瀏覽器的控制檯窗口。 謝謝你的建議。

+0

在try catch塊異常對象具有您已列爲「的ErrorHandler」功能參數的那些屬性。所以你有兩個選擇。在catch塊中傳遞異常對象並檢索其信息,或者在catch塊中分解異常對象並調用「errorHandler」函數。 –

+0

你可以查看這個鏈接https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error –

+0

我可以在不使用try catch塊的情況下獲得所有運行時錯誤嗎?我需要在每個功能中添加try catch嗎? – MLElyakan

回答

0

你可以使用try catch塊來捕獲這些錯誤:

try{ 
    test(); 
} catch(error){ 
    console.log("Following error happened:", error); 
} 
+0

事實上,我想使用全局事件處理程序而不是try catch塊。那可能嗎 ? – MLElyakan

0

嗯,我想下面的使用情況下的onerrorthis MDN Link

<!DOCTYPE html> 

<html lang="en" xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta charset="utf-8" /> 
    <title></title> 
</head> 
<body onload="Test1();"> 

    <script type="text/javascript"> 
     function Test1() { 
      Test2(); 
     } 

     window.onerror = function (msg, url, lineNo, columnNo, error) { 
      var string = msg.toLowerCase(); 
      var substring = "script error"; 
      if (string.indexOf(substring) > -1) { 
       alert('Script Error: See Browser Console for Detail'); 
      } else { 
       var message = [ 
        'Message: ' + msg, 
        'URL: ' + url, 
        'Line: ' + lineNo, 
        'Column: ' + columnNo, 
        'Error object: ' + JSON.stringify(error) 
       ].join(' - '); 

       //uncomment below line to see the message in console. 
       //console.log(message); 
       alert(message); 
      } 

      return false; 
     }; 
    </script> 
</body> 
</html> 

採取它顯示了正確的消息行號和列號錯誤的位置。

記錄到控制檯時,錯誤信息如下:

DOM7011: The code on this page disabled back and forward caching. For more information, see: http://go.microsoft.com/fwlink/?LinkID=291337 
HTMLPage1.html 
HTML1300: Navigation occurred. 
HTMLPage1.html 
SCRIPT5009: 'Test2' is undefined 
HTMLPage1.html (12,13) 
Message: 'Test2' is undefined - URL: file:Desktop/HTMLPage1.html - Line: 12 - Column: 13 - Error object: undefined 
HTMLPage1.html (29,17) 
+0

當我用Test1函數試試catch塊時。 window.onerror不會捕獲任何錯誤。這是應該的,對吧? – MLElyakan

+0

如果我在Test2()函數旁添加一個新的未定義函數。錯誤處理程序只返回一個未定義的函數錯誤。找不到其他未定義的功能。是否有可能捕獲其他異常?謝謝 – MLElyakan

+0

@MLE無論何時出現異常或錯誤,JavaScript都會創建一個具有許多屬性的異常對象。包括上面提到的那些還有一個更重要的屬性Stack。這個Stack屬性是字符串,當通過「window.onerror」調用時,會在各種參數中被破壞。無論何時使用「try ... catch」塊,JavaScript都不會破譯堆棧屬性,這是您的責任。 –