如何最好地确定用户是否已经打开浏览器控制台(即Firebug,Webkit Inspector,Opera Dragonfly)?
(即我不仅仅是想检测脚本中console
对象的存在。 我想知道用户何时实际上打开了调试器面板。 理想情况下跨主要浏览器(IE / Safari / Chrome / Firefox ...甚至移动浏览器 如果可能)
如何最好地确定用户是否已经打开浏览器控制台(即Firebug,Webkit Inspector,Opera Dragonfly)?
(即我不仅仅是想检测脚本中console
对象的存在。 我想知道用户何时实际上打开了调试器面板。 理想情况下跨主要浏览器(IE / Safari / Chrome / Firefox ...甚至移动浏览器 如果可能)
如果您愿意为用户接受干扰,您可以使用调试器语句,因为它在所有主要浏览器中都可用。
顺便说一下:如果您的应用程序用户对控制台使用感兴趣,他们可能熟悉开发工具,并且不会对其出现感到惊讶。
简而言之,该语句作为断点起作用,仅当浏览器的开发工具打开时才会影响UI。
以下是一个示例测试:
<body>
<p>Devtools is <span id='test'>off</span></p>
<script>
var minimalUserResponseInMiliseconds = 100;
var before = new Date().getTime();
debugger;
var after = new Date().getTime();
if (after - before > minimalUserResponseInMiliseconds) { // user had to resume the script manually via opened dev tools
document.getElementById('test').innerHTML = 'on';
}
</script>
</body>
免责声明:我最初发布了这个确切的答案,用于这个可能是重复问题的问题
。出于安全原因,JavaScript 不直接支持此功能。如果您需要跨浏览器支持,则需要创建浏览器插件,但这显然不是可行的解决方案。
不过,有一个聪明的解决方案是,有人想出了一个针对 Chrome 的解决方案,尽管我可以想象这只是一个长期的解决方案,因为它依赖于当控制台开启时代码运行速度变慢的事实:
http://blog.guya.net/2014/06/20/how-to-know-when-chrome-console-is-open/
window.console
是否存在来判断 IE 控制台是否打开。 - Paul Draper