2016-11-01 8 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の」関数のパラメータとしてリストされてきたこれらの特性を有しています。したがって、2つの選択肢があります。 catchブロックで例外オブジェクトを渡してその情報を取得するか、catchブロックで例外オブジェクトを中断して "errorHandler"関数を呼び出します。 –

+0

このリンクをチェックすることができますhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error –

+0

try catchブロックを使用せずにすべてのランタイムエラーを取得できますか?すべての機能にtry catchを追加する必要がありますか? – MLElyakan

答えて

0

あなたがこれらのエラーをキャッチしようとするcatchブロックを使用することができます。

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

実際、try catchブロックの代わりにグローバルイベントハンドラを使用したいと思います。それは可能ですか? – MLElyakan

0

まあ、私は ONERROR this 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の機能の中でブロックをキャッチしようとしました。 window.onerrorはエラーを捕捉しません。これは正しいはずです。 – MLElyakan

+0

Test2()関数の横に新しい未定義関数を追加するとします。エラーハンドラは、未定義の関数エラーを1つだけ返します。他の未定義の関数を見つけることができません。他の例外を捕捉することは可能ですか?ありがとうございます – MLElyakan

+0

@MLE例外またはエラーが発生するたびに、JavaScriptは多くのプロパティを持つ例外オブジェクトを作成します。上に挙げたものを含め、Stackという重要なプロパティがもう一つあります。このStackプロパティ(文字列)は、 "window.onerror"で呼び出されると、さまざまなパラメータで破損します。 try ... catchブロックを使用するたびに、JavaScriptはスタックプロパティを解読しません。そのようにするのはあなたの責任です。 –

関連する問題