Wow - ich habe in den letzten 6 Jahren niemanden gesehen, der vorgeschlagen hätte, zuerst zu prüfen, ob stack
verfügbar ist, bevor Sie es verwenden! Das Schlimmste, was Sie in einem Error-Handler tun können, ist, einen Fehler auszulösen, weil Sie etwas aufrufen, das nicht existiert.
Wie andere gesagt haben, während stack
ist in den meisten Fällen sicher zu verwenden, wird aber in IE9 oder früher nicht unterstützt.
Ich protokolliere meine unerwarteten Fehler und ein Stack-Trace ist ziemlich wichtig. Für maximale Unterstützung prüfe ich zunächst, ob Error.prototype.stack
existiert und eine Funktion ist. Wenn dies der Fall ist, dann ist es sicher zu verwenden error.stack
.
window.onerror = function (message: string, filename?: string, line?: number,
col?: number, error?: Error)
{
// always wrap error handling in a try catch
try
{
// get the stack trace, and if not supported make our own the best we can
var msg = (typeof Error.prototype.stack == 'function') ? error.stack :
"NO-STACK " + filename + ' ' + line + ':' + col + ' + message;
// log errors here or whatever you're planning on doing
alert(msg);
}
catch (err)
{
}
};
Edit : Es scheint, dass seit stack
eine Eigenschaft und keine Methode ist, können Sie sie auch in älteren Browsern sicher aufrufen. Ich bin immer noch verwirrt, weil ich ziemlich sicher war, dass die Überprüfung Error.prototype
hat bei mir früher funktioniert und jetzt nicht mehr - ich bin mir also nicht sicher, was da los ist.