Javascript+;浏览器-如何检测开发工具/firebug何时打开?

Javascript+;浏览器-如何检测开发工具/firebug何时打开?,javascript,google-chrome,web,Javascript,Google Chrome,Web,在你们中的任何人开始说这是不可能的之前,请导航到facebook.com打开devtools,即使在非连接模式下,它也会告诉你dev tools已打开,对吗 那么facebook是如何做到这一点的呢 我可以为连接的窗口执行此操作 window.outerHeight - window.innerHeight > 200 || window.outerWidth - window.innerWidth > 200 但是当窗口弹出时,这不起作用 facebook是如何做到这一点的?我认

在你们中的任何人开始说这是不可能的之前,请导航到facebook.com打开devtools,即使在非连接模式下,它也会告诉你dev tools已打开,对吗

那么facebook是如何做到这一点的呢

我可以为连接的窗口执行此操作

window.outerHeight - window.innerHeight > 200 || window.outerWidth - window.innerWidth > 200
但是当窗口弹出时,这不起作用


facebook是如何做到这一点的?

我认为facebook所做的只是将警告记录在控制台中。 下面是在Chrome中为我工作的代码。 我禁用了在Chrome中启动开发者工具的3种方法:

  • 右键单击并选择检查选项:为此,我禁用了右键单击
  • F12按键:阻止此事件的默认行为
  • Ctrl+Shift+I:阻止所有Ctrl默认行为
  • 看,如果你能负担得起的话

    document.onkeydown = function(event) {      
        if(event.code == "F12" || event.ctrlKey) {
            event.preventDefault();
        }
    }
    document.addEventListener('contextmenu', event => event.preventDefault());
    

    我认为facebook所做的只是将警告记录在控制台中。 下面是在Chrome中为我工作的代码。 我禁用了在Chrome中启动开发者工具的3种方法:

  • 右键单击并选择检查选项:为此,我禁用了右键单击
  • F12按键:阻止此事件的默认行为
  • Ctrl+Shift+I:阻止所有Ctrl默认行为
  • 看,如果你能负担得起的话

    document.onkeydown = function(event) {      
        if(event.code == "F12" || event.ctrlKey) {
            event.preventDefault();
        }
    }
    document.addEventListener('contextmenu', event => event.preventDefault());
    
    正如@在评论中推测的那样,他们只是在页面加载时使用
    console.log
    来记录,他们没有检测到您已经打开了控制台

    如果检查页面上的JS代码,您会发现:

    var j = i.stop || h._("Stop!")
      , k = i.text || h._("This is a browser feature intended for developers. If someone told you to copy-paste something here to enable a Facebook feature or \"hack\" someone's account, it is a scam and will give them access to your Facebook account.")
      , l = i.more || h._("See {url} for more information.", [h.param('url', 'https://www.facebook.com/selfxss')]);
    if ((window.chrome || window.safari) && !i.textonly) {
        var m = 'font-family:helvetica; font-size:20px; ';
        [[j, i.c1 || m + 'font-size:50px; font-weight:bold; ' + 'color:red; -webkit-text-stroke:1px black;'], [k, i.c2 || m], [l, i.c3 || m], ['', '']].map(function(s) {
            setTimeout(console.log.bind(console, '\n%c' + s[0], s[1]));
        });
    } else {
        var n = ['', ' .d8888b.  888                       888', 'd88P  Y88b 888                       888', 'Y88b.      888                       888', ' "Y888b.   888888  .d88b.  88888b.   888', '    "Y88b. 888    d88""88b 888 "88b  888', '      "888 888    888  888 888  888  Y8P', 'Y88b  d88P Y88b.  Y88..88P 888 d88P', ' "Y8888P"   "Y888  "Y88P"  88888P"   888', '                           888', '                           888', '                           888']
          , o = ('' + k).match(/.{35}.+?\s+|.+$/g)
          , p = Math.floor(Math.max(0, (n.length - o.length) / 2));
        for (var q = 0; q < n.length || q < o.length; q++) {
            var r = n[q];
            n[q] = r + new Array(45 - r.length).join(' ') + (o[q - p] || '');
        }
        console.log('\n\n\n' + n.join('\n') + '\n\n' + l + '\n');
        return;
    }
    
    正如@在评论中推测的那样,他们只是在页面加载时使用
    console.log
    来记录,他们没有检测到您已经打开了控制台

    如果检查页面上的JS代码,您会发现:

    var j = i.stop || h._("Stop!")
      , k = i.text || h._("This is a browser feature intended for developers. If someone told you to copy-paste something here to enable a Facebook feature or \"hack\" someone's account, it is a scam and will give them access to your Facebook account.")
      , l = i.more || h._("See {url} for more information.", [h.param('url', 'https://www.facebook.com/selfxss')]);
    if ((window.chrome || window.safari) && !i.textonly) {
        var m = 'font-family:helvetica; font-size:20px; ';
        [[j, i.c1 || m + 'font-size:50px; font-weight:bold; ' + 'color:red; -webkit-text-stroke:1px black;'], [k, i.c2 || m], [l, i.c3 || m], ['', '']].map(function(s) {
            setTimeout(console.log.bind(console, '\n%c' + s[0], s[1]));
        });
    } else {
        var n = ['', ' .d8888b.  888                       888', 'd88P  Y88b 888                       888', 'Y88b.      888                       888', ' "Y888b.   888888  .d88b.  88888b.   888', '    "Y88b. 888    d88""88b 888 "88b  888', '      "888 888    888  888 888  888  Y8P', 'Y88b  d88P Y88b.  Y88..88P 888 d88P', ' "Y8888P"   "Y888  "Y88P"  88888P"   888', '                           888', '                           888', '                           888']
          , o = ('' + k).match(/.{35}.+?\s+|.+$/g)
          , p = Math.floor(Math.max(0, (n.length - o.length) / 2));
        for (var q = 0; q < n.length || q < o.length; q++) {
            var r = n[q];
            n[q] = r + new Array(45 - r.length).join(' ') + (o[q - p] || '');
        }
        console.log('\n\n\n' + n.join('\n') + '\n\n' + l + '\n');
        return;
    }
    

    我猜他们把那个控制台放在了前面。在打开开发工具之前,您不会看到它。我不太明白为什么您需要知道devtool是否已打开。@elpddev,您是对的,它只是
    console.log
    ,具有一些奇特的格式。如果你想看看他们使用的代码,请看我的答案。我猜他们把控制台警告放在最前面了。在打开开发工具之前,您不会看到它。我不太明白为什么您需要知道devtool是否已打开。@elpddev,您是对的,它只是
    console.log
    ,具有一些奇特的格式。如果你想看看他们使用的代码,请看我的答案。