【问题标题】:Is it possible to detect that the IE8 debugger is attached是否可以检测到附加了 IE8 调试器
【发布时间】:2010-12-22 15:39:17
【问题描述】:

我的应用程序中有一些代码将 function.apply 和 function.call 包装在 try/catch 块中。使用 arguments.caller 捕获错误和构建伪堆栈很方便,但它会对 IE 的调试器造成严重破坏。

我可以使用 url 参数关闭包装,但如果附加了调试器,我想自动关闭它。我找不到检测调试器的方法。有什么想法吗?

【问题讨论】:

  • 它会给你像萤火虫和铬之类的对象console吗?在这种情况下,if (console) 和确定浏览器是否为 IE 的检查就足够了。
  • @thejh 我希望是这样。调试器打开但未连接时出现控制台。我真的需要知道它什么时候附加。
  • 调试器是否以某种方式对捕获的异常做出反应?
  • @thejh 问题是,如果它们被 try/catch 捕获,它不会因错误而中断。我最终手动删除了我的 try/catch 块以重现错误,以便我可以让它在错误时中断。显然,当错误仅发生在生产环境中时,这不太好。

标签: javascript ie-developer-tools


【解决方案1】:

不确定是否适用于 IE8,但您可以通过检查来检测调试器是否在 IE9/IE10/IE11 中运行:

var isIeDebugging = !!window.__IE_DEVTOOLBAR_CONSOLE_COMMAND_LINE || ('__BROWSERTOOLS_DOMEXPLORER_ADDED' in window);

例如见http://jsbin.com/IJOwuje/5

但是,在 IE9/IE10 中,对于只运行过一次调试器的窗口,即使调试器现在关闭,它也会设置为 true。

在 IE11 中,各种 window.__BROWSERTOOLS* 键似乎只根据打开或使用的调试器选项卡出现,因此检查调试框架是否打开不是 100% 可靠...

【讨论】:

    【解决方案2】:

    这不是您想要的答案,但我过去通过使用一小部分加载器 JS 来处理这个问题,首先检查 URL 中的哈希(如果有)是否有密码,例如:

    mysite.com/#mXVa

    所以加载器会检查,如果 location.hash == 'mXVa',我的加载器会加载页面上所有脚本的调试版本(没有 try/catch 等),而不是缩小的、吃错的版本。

    【讨论】:

    • 是的,我现在设置了类似的东西。这似乎是唯一的方法:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2011-07-20
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多