【问题标题】:Log javascript errors from another subdomain从另一个子域记录 javascript 错误
【发布时间】:2011-12-05 06:57:32
【问题描述】:

window.onerror 在 Firefox 和 Chrome 中似乎丢弃了真正的错误消息/位置,并且当有问题的脚本与页面本身位于不同的域时,总是传递 "Script error.", "", 0。我有一个站点,其页面和 css/js 具有单独的 wwwstatic 子域,这使得错误日志记录相当无用。有什么方法可以正确记录此类错误?

【问题讨论】:

  • 你应该尝试禁用同源策略,猜测是因为它数据被条带化。有关如何查看stackoverflow.com/q/330427/783219的信息。
  • @Prusse:我可以在用于开发的浏览器上做到这一点(虽然没有太多意义,因为我在浏览器中看到了错误),但这里的重点是捕获访问者浏览器中发生的错误。

标签: javascript error-logging


【解决方案1】:

目前似乎没有解决方法(我在 Mozilla IRC 频道中询问过)。

我已提交这些错误报告以跟踪此问题。如果您对此问题的最佳解决方案有意见,请提出意见:

https://bugzilla.mozilla.org/show_bug.cgi?id=696301

https://bugs.webkit.org/show_bug.cgi?id=70574

【讨论】:

  • 从错误报告开始,我发现this blogpost 很好地解释了为什么首先需要这些神秘的错误消息(这一直让我感到困惑)。谢谢!
  • 根据上面的错误,现在已经解决了吗?所以这个问题的答案是在你的脚本上使用正确的 CORS 标头。
【解决方案2】:

真正的解决方案是在所有代码中使用正确的try { ... } catch(e) { ... } 块。但是,我知道这可能并不总是一种选择。

如果您无法控制这些其他脚本,则下一个最佳选择是通过 JSONP 将它们作为字符串加载,然后使用 eval()(是的,我知道 eval is evil)将它们“注入”到当前页面。这样您仍然可以获得使用静态域的好处(无 cookie、CDN 选项、额外的并发请求等),但 JS 最终将位于页面的请求域中。

【讨论】:

  • 我也需要控制 JSONP 的脚本,因为我必须将其转换为字符串并将其传递给回调。 evaling 也可能有小的性能缺陷,例如失去延迟脚本加载的能力。 Try-catch 似乎是严格意义上更好的解决方案,但对于第三方脚本来说仍然有些痛苦。
【解决方案3】:

在你的 js 文件中,在顶部尝试做

document.domain = "yourdomain.com"

【讨论】:

  • 请在发布前验证您建议的答案是否有效(无效)
猜你喜欢
  • 2013-08-24
  • 2017-08-01
  • 2014-09-11
  • 2013-07-04
  • 2012-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-12
相关资源
最近更新 更多