我正在尝试在 JavaScript 中生成堆栈跟踪。我有一个在 Chrome 中运行良好的实现,但在 Firefox 中存在一个问题:像 DOMExceptions 这样的 native 异常没有 .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>
这将给出错误:索引或大小为负数,或大于允许的值。
在 Chrome 中位于 http://test/test.html:5:8
。
但是在 Firefox 中我得到了未定义
- 悲伤的事实:(
我知道Eriwen's stacktrace script和 stracktracejs我的实现受到了的启发。我会考虑使用 caller.callee
后备,但我不想这样做,因为我无法获取文件和行号。
您知道更好的解决方案吗?
<小时/>我可以将可疑调用包装在 try-catch 语句中,但在收到实际错误之前我不知道调用是否可疑,然后我将修复代码,使其永远不会再次抛出。
我可以捕获异常并重新抛出新错误(e.message)
,但随后我也会丢失堆栈跟踪。
最佳答案
我试过e.location
但这会导致 known bug in Firefox 。 Error: Permission denied for <file://> to create wrapper for object of class UnnamedClass
.
我可以访问e.filename
和e.lineNumber
。这就是我现在要采用的解决方案。
关于javascript - DOMException 在 Chrome 中有堆栈,但在 Firefox 中没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13252209/