Descubra si la consola Chrome está abierta
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!
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
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
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>
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');
}
}
Cromo 65+ (2018)
r = /./
r.toString = function () {
document.title = '1'
}
console.log('%c', r);
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);
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);