1

我正在尝试在 JavaScript 中生成堆栈跟踪。我有一个在 Chrome 中运行良好的实现,但在 Firefox 中存在一个问题:像 DOMExceptions 这样的本机异常没有.stack属性。

<div id="test"></div>
<script type="text/javascript">
try {
    var range = document.createRange();
    range.setStart(document.getElementById("test"), -1); // throws Exception
} catch (e) {
    console.log(e.stack);
}
</script>

这将Error: Index or size was negative, or greater than the allowed value. at http://test/test.html:5:8在 Chrome 中给出。

但是在 Firefox 中我得到了undefined- 可悲的 fais :(

我知道Eriwen 的 stacktrace 脚本stracktracejs,我的实现受到了它的启发。我会考虑使用caller.callee后备,但我宁愿不使用,因为我无法获取文件和行号。

你知道更好的解决方案吗?


我可以将可疑调用包装在 try-catch 语句中,但在得到实际错误之前我不知道调用是否可疑,然后我将修复代码,使其永远不会再次抛出。

我可以捕获异常并重新抛出,new Error(e.message)但是我也丢失了堆栈跟踪。

4

1 回答 1

0

我试过e.location了,但这会导致Firefox 中的一个已知错误Error: Permission denied for <file://> to create wrapper for object of class UnnamedClass.

可以访问e.filenamee.lineNumber. 这是我现在要使用的解决方案。

于 2012-11-06T14:36:00.497 回答