2

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

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

4

2 回答 2

2

不确定 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% 可靠...

于 2013-11-19T01:26:43.987 回答
0

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

mysite.com/#mXVa

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

于 2011-02-03T18:21:30.847 回答