我正在使用这个小脚本来确定 Firebug 是否打开:
if (window.console && window.console.firebug) { //is open };
而且效果很好。现在找了半个小时,想办法检测谷歌浏览器内置的web开发者控制台是否打开,但是找不到任何提示。
这个:
if (window.console && window.console.chrome) { //is open };
不起作用。
编辑:
所以似乎无法检测 Chrome 控制台是否打开。但是有一个“ hack ”可以工作,但有一些缺点:
所以,我现在会选择Unsigned麓的答案,但是如果有人提出了一个绝妙的主意,欢迎他仍然回答,我改变选择的答案!谢谢!
将这些先前的答案留在这里作为历史背景。目前Muhammad Umer的方法适用于 Chrome78,具有检测关闭和打开事件的额外优势。
非常可靠的黑客
基本上在属性上设置一个吸气剂并将其记录在控制台中。显然,只有在控制台打开时才能访问该东西。
https://jsfiddle.net/gcdfs3oo/44/
var checkStatus; var indicator = document.querySelector('#devtool-status'); var element = new Image(); Object.defineProperty(element, 'id', { get: function() { checkStatus='on'; throw new Error("Dev tools checker"); } }); requestAnimationFrame(function check() { checkStatus = 'off'; console.dir(element); indicator.className = checkStatus; requestAnimationFrame(check); }); .on{ color:limegreen; } .off{ color:red; } <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.7.1/css/all.css" integrity="sha256-DVK12s61Wqwmj3XI0zZ9MFFmnNH8puF/eRHTB4ftKwk=" crossorigin="anonymous" /> <p> <ul> <li> dev toolbar open: icon is <span class="on">green</span> </li> <li> dev toolbar closed: icon is <span class="off">red</span> </li> </ul> </p> <div id="devtool-status"><i class="fas fa-7x fa-power-off"></i></div> <br/> <p><b>Now press F12 to see if this works for your browser!</b></p>
感谢 Overcl9ck对此答案的评论。/./用空函数对象替换正则表达式仍然有效。
/./
var devtools = function() {}; devtools.toString = function() { if (!this.opened) { alert("Opened"); } this.opened = true; } console.log('%c', devtools); // devtools.opened will become true if/when the console is opened
由于最初的询问者似乎不再存在并且这仍然是公认的答案,因此添加此解决方案以提高可见性。归功于Antonin Hildebrand对zswang回答的评论。该解决方案利用了除非控制台打开,否则不会在记录的对象上调用的事实。toString()
toString()
var devtools = /./; devtools.toString = function() { if (!this.opened) { alert("Opened"); } this.opened = true; } console.log('%c', devtools); // devtools.opened will become true if/when the console is opened
更新: console.profiles已从 Chrome 中删除。此解决方案不再有效。
console.profiles
感谢Paul Irish使用分析器从中指出了这个解决方案:
function isInspectOpen() { console.profile(); console.profileEnd(); if (console.clear) { console.clear(); } return console.profiles.length > 0; } function showIfInspectIsOpen() { alert(isInspectOpen()); } <button onClick="showIfInspectIsOpen()">Is it open?</button>
此其他选项可以在页面加载 后检测停靠的检查器正在打开, 但无法检测未停靠的检查器,或者检查器是否已在页面加载时打开。还有一些误报的可能性。
window.onresize = function() { if ((window.outerHeight - window.innerHeight) > 100) { alert('Docked inspector was opened'); } }