首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >查看Chrome控制台是否打开

查看Chrome控制台是否打开
EN

Stack Overflow用户
提问于 2011-10-18 03:47:25
回答 17查看 117.7K关注 0票数 174

我正在使用这个小脚本来查看Firebug是否打开:

代码语言:javascript
复制
if (window.console && window.console.firebug) {
    //is open
};

它工作得很好。现在,我花了半个小时寻找一种方法来检测Google Chrome的内置web开发人员控制台是否打开,但我没有找到任何提示。

这是:

代码语言:javascript
复制
if (window.console && window.console.chrome) {
    //is open
};

不起作用。

编辑:

因此,似乎无法检测Chrome控制台是否打开。但是有一个“

黑客

“这是可行的,但也有一些缺点:

当控制台断开与坞站的连接时将不起作用

当控制台在页面加载时打开时将不起作用

所以,我现在选择未签名的答案,但如果some1想出了一个聪明的想法,欢迎他仍然回答,我改变选择的答案!谢谢!

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2011-10-18 23:02:47

requestAnimationFrame (2019年末)

将这些先前的答案留在这里作为历史背景。目前

穆罕默德·乌默尔的方法

在Chrome 78上工作,具有检测关闭和打开事件的额外优势。

function toString (2019)

归功于

Overcl9ck

对此答案的评论。替换正则表达式

函数对象为空的情况下仍然有效。

代码语言:javascript
复制
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

正则表达式toString (2017-2018)

由于最初的提问者似乎不再存在,而这仍然是公认的答案,因此添加此解决方案以提高可见性。功劳归于

安东宁·希尔德布兰德

%s

评论

打开

zswang

%s

答案

..。此解决方案利用了以下事实

除非控制台处于打开状态,否则不会对记录的对象调用。

代码语言:javascript
复制
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 (2013)

更新:

已从Chrome中删除。此解决方案不再有效。

感谢

保罗·爱尔兰

从以下位置指出这个解决方案:

发现DevTools

,使用profiler:

代码语言:javascript
复制
function isInspectOpen() {
  console.profile();
  console.profileEnd();
  if (console.clear) {
    console.clear();
  }
  return console.profiles.length > 0;
}
function showIfInspectIsOpen() {
  alert(isInspectOpen());
}
代码语言:javascript
复制
Is it open?

window.innerHeight (2011)

此另一个选项可以检测停靠的检查器

打开,之后

页面加载,但将无法检测到未停靠的检查器,或者检查器在页面加载时已打开。也存在一些误报的可能性。

代码语言:javascript
复制
window.onresize = function() {
  if ((window.outerHeight - window.innerHeight) > 100) {
    alert('Docked inspector was opened');
  }
}

票数 124
EN

Stack Overflow用户

发布于 2015-06-04 16:02:46

Chrome 65+ (2018)

代码语言:javascript
复制
r = /./
    r.toString = function () {
        document.title = '1'
    }
    console.log('%c', r);

演示:

https://jsbin.com/cecuzeb/edit?output

(更新于2018-03-16)

包:

https://github.com/zswang/jdetects

当打印“元素”时,Chrome开发者工具将获得它的id

代码语言:javascript
复制
var checkStatus;
    
    var element = document.createElement('any');
    element.__defineGetter__('id', function() {
        checkStatus = 'on';
    });
    
    setInterval(function() {
        checkStatus = 'off';
        console.log(element);
        console.clear();
    }, 1000);

另一个版本(来自评论)

代码语言:javascript
复制
var element = new Image();
Object.defineProperty(element, 'id', {
  get: function () {
    /* TODO */
    alert('囧');
  }
});
console.log('%cHello', element);

打印常规变量:

代码语言:javascript
复制
var r = /./;
    r.toString = function() {
      document.title = 'on';
    };
    console.log(r);

票数 126
EN

Stack Overflow用户

发布于 2018-01-17 02:27:37

非常可靠的黑客攻击

基本上,在属性上设置一个getter,并将其记录在控制台中。显然,只有当控制台打开时,才能访问它。

https://jsfiddle.net/gcdfs3oo/44/

代码语言:javascript
复制
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);
});
代码语言:javascript
复制
.on{
  color:limegreen;
}

.off{
  color:red;
}
代码语言:javascript
复制
dev toolbar open: icon is green
    
    
      dev toolbar closed: icon is red
    
  




Now press F12 to see if this works for your browser!

票数 47
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7798748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档