2016-11-01 2 views
0

Ich möchte Laufzeitfehler in Javascript behandeln. Aber ich bin mit einem Problem konfrontiert. Wenn ich die Funktion window.onerror benutzt habe, kann es zu Fehleingaben kommen. Aber ich definiere eine undefinierte Funktion innerhalb einer definierten Funktion. Ich kann keine Ausnahme sehen. Wo mache ich einen Fehler?Laufzeitfehler in Javascript behandeln

Hier ist mein Code, den ich verwendet habe;

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(); 
    } 

Die Funktion "exceptionTest()" ist in meinem Code definiert. Aber Testfunktion ist undefiniert. Ich möchte eine Fehlermeldung über diese undefinierte Funktion erhalten. Wie kann ich das machen ? Es zeigt nur das Konsolenfenster des Browsers an. Vielen Dank für Ihre Vorschläge.

+0

Das Objekt Ausnahme in Block try catch hat diese Eigenschaften, die Sie als Parameter in „Fehlerbehandler“ Funktion aufgelistet haben. Sie haben also zwei Möglichkeiten. Entweder im catch-Block übergeben Sie das Ausnahme-Objekt und rufen Sie seine Informationen ab oder im catch-Block brechen Sie das Ausnahme-Objekt und rufen Sie die "errorHandler" -Funktion auf. –

+0

Sie können diesen Link überprüfen https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error –

+0

Kann ich alle Laufzeitfehler erhalten, ohne try catch-Blöcke zu verwenden? Muss ich in jeder Funktion try catch hinzufügen? – MLElyakan

Antwort

0

Sie versuchen, catch-Blöcke verwenden können, um diese Fehler zu fangen:

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

Eigentlich möchte ich einen globalen Event-Handler anstelle von try catch-Blöcken verwenden. Ist das möglich ? – MLElyakan

0

Nun, ich unter Verwendung Fall versucht, wo onerror von 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> 

genommen wird und es richtig Meldung zeigt mit die Position des Fehlers mit Zeilennummer und Spaltennummer.

Die Fehlerinformationen, wenn auf Konsole angemeldet ist wie folgt:

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

Als ich versuchte, Block innerhalb der Funktion Test1 zu versuchen. window.onerror fängt keinen Fehler ab. Das ist so wie es sein sollte, oder? – MLElyakan

+0

Wenn ich eine neue undefinierte Funktion neben der Test2() - Funktion hinzufüge. Der Fehlerhandler gibt nur einen nicht definierten Funktionsfehler zurück. Die andere undefinierte Funktion kann nicht gefunden werden. Ist es möglich, andere Ausnahmen zu fangen? Danke – MLElyakan

+0

@MLE Immer wenn es eine Ausnahme oder einen Fehler gibt, wird JavaScript ein Ausnahmeobjekt erstellen, das viele Eigenschaften haben wird. Einschließlich der oben genannten gibt es eine weitere wichtige Eigenschaft namens Stack. Diese Stack-Eigenschaft, bei der es sich um eine Zeichenfolge handelt, ist in verschiedenen Parametern unterteilt, wenn sie über "window.onerror" aufgerufen wird. Wann immer Sie den Block "try ... catch" verwenden, wird JavaScript die Stack-Eigenschaft nicht entschlüsseln. Es liegt in Ihrer Verantwortung, dies zu tun. –