Descubra si la consola Chrome está abierta

Resuelto r0skar asked hace 12 años • 23 respuestas

Estoy usando este pequeño script para saber si Firebug está abierto:

if (window.console && window.console.firebug) {
    //is open
};

Y funciona bien. Ahora estuve buscando durante media hora una manera de detectar si la consola de desarrollo web integrada de Google Chrome está abierta, pero no pude encontrar ninguna pista.

Este:

if (window.console && window.console.chrome) {
    //is open
};

no funciona.

EDITAR:

Entonces parece que no es posible detectar si la consola Chrome está abierta. Pero hay un " truco " que funciona, con algunos inconvenientes:

  • no funcionará cuando la consola esté desacoplada
  • no funcionará cuando la consola esté abierta al cargar la página

Entonces, voy a elegir la respuesta de Unsigned por ahora, pero si a alguien se le ocurre una idea brillante, ¡puede responder de todos modos y yo cambio la respuesta seleccionada! ¡Gracias!

r0skar avatar Oct 18 '11 02:10 r0skar
Aceptado

Dejando las respuestas anteriores a continuación para el contexto histórico.

Depurador (2022)

Si bien no es infalible, este enfoque basado en depurador en otra respuesta parece seguir funcionando.

requestAnimationFrame (finales de 2019)

Actualmente, el enfoque de Muhammad Umer funciona en Chrome 78, con la ventaja adicional de detectar eventos abiertos y cerrados.

función toString (2019)

Crédito al comentario de Overcl9ck sobre esta respuesta. Reemplazar la expresión regular /./con un objeto de función vacío todavía funciona.

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
Expandir fragmento

expresión regular aString (2017-2018)

Dado que el autor de la pregunta original ya no parece existir y esta sigue siendo la respuesta aceptada, agregue esta solución para mayor visibilidad. El mérito es del comentario de Antonin Hildebrand sobre la respuesta de zswang . Esta solución aprovecha el hecho de que no se llama a objetos registrados a menos que la consola esté abierta.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
Expandir fragmento

consola.perfiles (2013)

Actualización: console.profiles se ha eliminado de Chrome. Esta solución ya no funciona.

Gracias a Paul Irish por señalar esta solución de Discover DevTools , utilizando el generador de perfiles:

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>
Expandir fragmento

ventana.alturainterior (2011)

Esta otra opción puede detectar que el inspector acoplado se abre después de que se carga la página, pero no podrá detectar un inspector desacoplado o si el inspector ya estaba abierto al cargar la página. También existe la posibilidad de que se produzcan falsos positivos.

window.onresize = function() {
  if ((window.outerHeight - window.innerHeight) > 100) {
    alert('Docked inspector was opened');
  }
}
Expandir fragmento

Unsigned avatar Oct 18 '2011 15:10 Unsigned

Cromo 65+ (2018)

    r = /./
    r.toString = function () {
        document.title = '1'
    }
    console.log('%c', r);
Expandir fragmento

demostración: https://jsbin.com/cecuzeb/edit?output (Actualización el 2018-03-16)

paquete: https://github.com/zswang/jdetects


Al imprimir "Elemento", las herramientas de desarrollo de Chrome obtendrán su identificación

    var checkStatus;
    
    var element = document.createElement('any');
    element.__defineGetter__('id', function() {
        checkStatus = 'on';
    });
    
    setInterval(function() {
        checkStatus = 'off';
        console.log(element);
        console.clear();
    }, 1000);
Expandir fragmento

Otra versión (de comentarios)

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

Imprime una variable regular:

    var r = /./;
    r.toString = function() {
      document.title = 'on';
    };
    console.log(r);
Expandir fragmento

zswang avatar Jun 04 '2015 08:06 zswang