2ni*_*2ni 12 javascript error-handling jquery stack-trace onerror
我正在尝试在生产网站上记录javascript错误.到目前为止,它与网站中包含的以下代码相得益彰:
function catcherr(errorMessage, url, line) {
var parameters = "msg=" + escape(errorMessage)
+ "&url=" + escape(url)
+ "&line=" + escape(line);
new Image().src = "/error.gif?" + parameters;
return false;
};
window.onerror = catcherr;
Run Code Online (Sandbox Code Playgroud)
我正在尝试向错误添加堆栈跟踪以获取更多信息.这基本上与以下想法一起使用,包括上面的功能:
try { i.dont.exist += 0; } // does not exist - that's the point
catch (e)
{
if (e.stack) // Firefox
{
// do some stuff
Run Code Online (Sandbox Code Playgroud)
我使用jquery,一个简单的例子:
<script type="text/javascript">
jQuery(document).ready(function() {
p.foo += 1; // this should throw an error
// do stuff
});
</script>
Run Code Online (Sandbox Code Playgroud)
有趣的是,当我在jquery的"ready"函数中有错误时,"try {i.dont.exist + = 0;}"部分不再抛出任何异常,引擎停止而没有任何错误.通过上面的示例,catcherr扩展如下,只有"1"被警告:
function catcherr(errorMessage, url, line) {
try { alert(1); i.dont.exist += 0; alert(4);} catch(e) { alert(5);}
alert(2);
var parameters = "msg=" + escape(errorMessage)
// ...
}
Run Code Online (Sandbox Code Playgroud)
任何人都知道为什么这会破坏,当jquery的"ready"函数内部发生错误时?
我不知道为什么你有这个问题(它看起来很奇怪,我不认为它是一个问题,JQuery吃你的异常,因为你的警报(1)不会被解雇),但我确实想提到你的使用Error.stack - 当onerror调用事件时,您没有原始错误的堆栈上下文,因此在该点获取堆栈跟踪(通过捕获您自己的错误)将不会产生有意义的堆栈.
但回到一个真正的答案 - 而不是通过编写特定的损坏代码来模拟问题,以便你可以捕获错误,如何直接抛出错误?你的onerror处理程序的第一行可能是:
try { throw new Error("dummy"); } catch (e) { alert(e.stack); }
Run Code Online (Sandbox Code Playgroud)
这是有效的代码,更有可能不会给您带来问题.
| 归档时间: |
|
| 查看次数: |
9374 次 |
| 最近记录: |