我的应用程序中有一些代码将 function.apply 和 function.call 包装在 try/catch 块中。使用 arguments.caller 捕获错误和构建伪堆栈很方便,但它会对 IE 的调试器造成严重破坏。
我可以使用 url 参数关闭包装,但如果附加了调试器,我想自动关闭它。我找不到检测调试器的方法。有任何想法吗?
我的应用程序中有一些代码将 function.apply 和 function.call 包装在 try/catch 块中。使用 arguments.caller 捕获错误和构建伪堆栈很方便,但它会对 IE 的调试器造成严重破坏。
我可以使用 url 参数关闭包装,但如果附加了调试器,我想自动关闭它。我找不到检测调试器的方法。有任何想法吗?
不确定 IE8,但您可以通过检查来检测调试器是否在 IE9/IE10/IE11 中运行:
var isIeDebugging = !!window.__IE_DEVTOOLBAR_CONSOLE_COMMAND_LINE || ('__BROWSERTOOLS_DOMEXPLORER_ADDED' in window);
但是,在 IE9/IE10 中,即使调试器现在已关闭,对于仅运行过一次调试器的窗口,此参数设置为 true。
同样在 IE11 中,各种 window.__BROWSERTOOLS* 键似乎只根据打开或使用的调试器选项卡出现,因此对于检查调试框架是否打开不是 100% 可靠...
这不是您想要的答案,但我过去通过使用一小部分加载器 JS 来处理此问题,首先检查 URL 中的哈希(如果有)是否有密码,例如:
mysite.com/#mXVa
所以加载器检查,如果 location.hash == 'mXVa',我的加载器会加载页面上所有脚本的调试版本(没有 try/catch 等),而不是缩小的、吃错的品种。