【问题标题】:DOMException has stack in Chrome but not in FirefoxDOMException 在 Chrome 中有堆栈,但在 Firefox 中没有
【发布时间】:2012-11-06 13:36:44
【问题描述】:

我正在尝试在 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>

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

但在 Firefox 中我得到 undefined - 悲伤的事实 :(

我知道Eriwen's stacktrace scriptstracktracejs,我的实现受到了它的启发。我会考虑使用caller.callee 后备,但我不想这样做,因为我无法获取文件和行号。

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


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

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

【问题讨论】:

  • 在 Firefox 中,e.toString() 似乎提供了堆栈跟踪。实际属性似乎是e.location,但访问时会引发错误。
  • 太棒了!我会调查一下。 - e.location 似乎提供了一个正确填充的caller.callee
  • 格式却完全不同。你想达到什么目的?我想你也可以重新抛出 throw e 如果这是你想要的。
  • e.location 当我在 Firebug 中查看它时,它看起来像我需要的东西,但是当我尝试使用 console.log(e.location); 时,我得到了 Error: Permission denied for &lt;file://&gt; to create wrapper for object of class UnnamedClass。这似乎是一个与安全相关的错误..什么? bugzilla.mozilla.org/show_bug.cgi?id=436953

标签: javascript firefox dom stack stack-trace


【解决方案1】:

我尝试了e.location,但这导致known bug in FirefoxError: Permission denied for &lt;file://&gt; to create wrapper for object of class UnnamedClass.

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 2012-02-05
    • 2019-11-29
    • 2014-03-08
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多