检测所有浏览器中是否打开了console / devtools

我正在尝试创建一个在打开或关闭任何浏览器控制台时运行的脚本。 有没有办法检测所有浏览器(Firefox / IE / Chrome / Safari / Opera)中的浏览器控制台是否通过JavaScript,jQuery或任何其他客户端脚本打开?

如果您愿意接受对用户的干扰,您可以使用调试器语句 ,因为它在所有主流浏览器中可用。

附注:如果您的应用程序的用户对控制台使用感兴趣,他们可能熟悉开发工具,并且不会因为它出现而感到惊讶。

简而言之,该语句充当断点, 仅在浏览器的开发工具打开时才会影响UI。

这是一个示例测试:

 

Devtools is off

它不可能以任何官方的跨浏览器方式,但如果偶尔的误报是可以接受的,您可以检查window.onresize事件。 用户在加载页面后调整窗口大小有点不常见。 如果您希望用户经常打开控制台,这意味着更有效,这意味着百分比误报率更低。 当用户访问页面时,或者用户在新窗口中打开控制台时,这将无法检测控制台是否已打开。

 window.onresize = function(){ if ((window.outerHeight - window.innerHeight) > 100) { // console was opened (or screen was resized) } } 

感谢https://stackoverflow.com/a/7809413/3774582 。 虽然这个问题是特定于铬的,但这个概念适用于此。

为了扩展这一点,如果你需要对误报的容忍度非常低,大多数窗口resize都会触发这个事件数十次,因为它通常是作为拖动动作完成的,而打开控制台只会触发一次。 如果您能够检测到这一点,那么该方法将变得更加准确。

出于安全原因,我不认为它在JS中是直接可能的。但是在这里他们声称它是可能的,并且当你想要在DevTools打开时发生特殊事情时它是有用的。 像暂停canvas,添加样式调试信息等。

但正如@James Hill所说,我也认为即使浏览器选择让客户端可以访问这些信息,它也不会是标准实现(在多个浏览器中支持)。 也可以在这里试试这个 。