请求动画框架(2019 年末)
把这些以前的答案留在这里,作为历史背景。目前,Muhammad Umer的方法适用于Chrome 78,具有检测关闭和打开事件的额外优势。
功能到字符串 (2019)
感谢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
正则表达式到字符串 (2017-2018)
由于原始的提问者似乎不再存在,这仍然是公认的答案,因此添加此解决方案以提高可见性。这要归功于Antonin Hildebrand对zswang答案的评论。此解决方案利用了除非控制台处于打开状态,否则不会对记录的对象调用的事实。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
控制台配置文件 (2013)
更新:已从 Chrome 中移除。此解决方案不再有效。console.profiles
感谢 Paul Irish 使用 profiler 从 Discover DevTools 中指出此解决方案:
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.innerHeight (2011)
另一个选项可以在页面加载后检测正在打开的停靠检查器,但无法检测到未停靠的检查器,或者检查器是否已在页面加载时打开。也有一些误报的可能性。
window.onresize = function() {
if ((window.outerHeight - window.innerHeight) > 100) {
alert('Docked inspector was opened');
}
}