2012-09-24 47 views
60

我试图找到或找出一种方法来显示警告框中的应用程序中的所有未处理的JavaScript异常。我希望所有这些都在客户端完成,而不使用任何服务器端代码。我使用MVC3作为环境。捕获所有的javascript未处理的异常

我一直在研究过去几天,还没有找到我正在寻找什么。

我发现以下两种方式看起来像他们几乎是我在找什么,除了这些方法设置,以便您必须传递一个函数名称到一个自定义的方法来打印所有未处理的堆栈跟踪该特定功能中的例外。我正在寻找一种方法,不必手动将函数名称传递给打印所有未处理异常的堆栈跟踪的自定义方法。我希望这些自定义方法只是“侦听”整个应用程序中的所有未处理的异常。

http://eriwen.com/javascript/js-stack-trace/

也类似于以前的链接的东西:

https://github.com/eriwen/javascript-stacktrace

下面是从上面第二连杆的基本代码打印指定的JavaScript函数的堆栈跟踪:

instrumentFunction: function (context, functionName, callback) { 
    context = context || window; 
    var original = context[functionName]; 
    context[functionName] = function instrumented() { 
     callback.call(this, printStackTrace().slice(4)); 
     return context[functionName]._instrumented.apply(this, arguments); 
    }; 
    context[functionName]._instrumented = original; 
} 

function printStackTrace(options) { 
    options = options || { 
     guess: true 
    }; 
    var ex = options.e || null, 
     guess = !! options.guess; 
    var p = new printStackTrace.implementation(), 
     result = p.run(ex); 
    return (guess) ? p.guessAnonymousFunctions(result) : result; 
} 

所以,总结一下,你们都知道有什么方法可以有一些'倾听呃'听所有的JavaScript未处理的异常,然后打印到一个警告框中的屏幕?

谢谢! Jason

+0

有一点......你会使用一个警告框吗?!?你可以使用console.log(error_message).... – Mathlight

+1

我认为_这是question_ ** [捕捉所有JS错误](http://stackoverflow.com/questions/5328154/catch-all-javascript-errors-and-发送-他们到服务器)**会帮助你 –

+0

你或许应该看看这个问题: http://stackoverflow.com/questions/205688/javascript-exception-handling – Mark

回答

-1

结账http://log4javascript.org它基于Log4J。如果大部分代码都包含在try/catch语句中以处理异常,则可以使用此库作为将输出发送到始终可用的“对话框”或最终用户可以看到的日志记录窗口的通用接口。您甚至可以使用执行window.print()的按钮将对话框的内容打印到打印机或PDF中。祝你好运。

86

你可以通过使用window.onerror方法来做到这一点。

window.onerror = function myErrorHandler(errorMsg, url, lineNumber) { 
    alert("Error occured: " + errorMsg);//or any message 
    return false; 
} 
+7

不过如此试图将我的整个应用程序封装在try/catch块中。 :) 谢谢! – Anthony

+10

只是个头: “请注意,有些/许多错误事件不会触发window.onerror,您必须专门听取它们。” -https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers.onerror – shusson

+5

没有必要在该代码中包含函数名称(myErrorHandler)...可以只是函数(errorMsg,url,lineNumber) – JoelFan

22

您可以使用window.onerror,或(令人惊讶!)结合 '错误' 事件正确:

window.onerror = function (message, file, line, col, error) { 
    alert("Error occured: " + error.message); 
    return false; 
}; 
window.addEventListener("error", function (e) { 
    alert("Error occured: " + e.error.message); 
    return false; 
}) 

如果你想跟踪JavaScript错误,你可以尝试Atatus。我在阿塔图斯工作。