Estoy usando este pequeño script para averiguar si Firebug está abierto:
if (window.console && window.console.firebug) {
//is open
};
Y funciona bien. Ahora estaba buscando durante media hora para encontrar una manera de detectar si la consola de desarrollador web incorporada de Google Chrome está abierta, pero no pude encontrar ninguna pista.
Esta:
if (window.console && window.console.chrome) {
//is open
};
no funciona
EDITAR:
Por lo tanto, parece que no es posible detectar si la consola Chrome está abierta. Pero hay un " hack " que funciona, con algunos inconvenientes:
- no funcionará cuando la consola esté desacoplada
- no funcionará cuando la consola esté abierta al cargar la página
Por lo tanto, voy a elegir la respuesta de Unsigned por ahora, pero si a alguien se le ocurre una idea brillante, ¡puede responder y cambiar la respuesta seleccionada! ¡Gracias!
.message
se recupera (lo que sucede cuando el depurador está abierto porque ves el mensaje), pero desafortunadamente esto también sucede cuando el depurador no está abierto. Me gustaría saber un truco para esto si es que existe ...Respuestas:
requestAnimationFrame (finales de 2019)
Dejando estas respuestas anteriores aquí para el contexto histórico. Actualmente, el enfoque de Muhammad Umer funciona en Chrome 78, con la ventaja adicional de detectar tanto eventos cercanos como abiertos.
función toString (2019)
Crédito para Overcl9ck comentario 's en esta respuesta. Reemplazar la expresión regular
/./
con un objeto de función vacío todavía funciona.regex toString (2017-2018)
Dado que el autor de la pregunta original ya no parece estar presente y esta sigue siendo la respuesta aceptada, agrega esta solución para la visibilidad. El crédito va a Antonin Hildebrand 's comentario sobre zswang ' s respuesta . Esta solución aprovecha el hecho de que
toString()
no se llama a los objetos registrados a menos que la consola esté abierta.console.profiles (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:
window.innerHeight (2011)
Esta otra opción puede detectar la apertura del inspector acoplado , después de cargar la página, pero no podrá detectar un inspector desacoplado, o si el inspector ya estaba abierto en la carga de la página. También hay potencial para falsos positivos.
fuente
function() {}
una expresión regular en lugar de una expresión regularChrome 65+ (2018)
demostración: https://jsbin.com/cecuzeb/edit?output (Actualización en 2018-03-16)
paquete: https://github.com/zswang/jdetects
Al imprimir "Element", las herramientas de desarrollador de Chrome obtendrán su id.
Otra versión (de comentarios)
Imprima una variable regular:
fuente
__defineGetter__
está en desuso, así que cambié aObject.defineProperty(element, 'id', {get:function() {checkStatus='on';}});
... aún trabajando.setInterval
Hack muy confiable
Básicamente establezca un getter en la propiedad e inicie sesión en la consola. Aparentemente, solo se accede a la cosa cuando la consola está abierta.
https://jsfiddle.net/gcdfs3oo/44/
fuente
throw new Error("Dev tools checker");
de? Porque funciona sin eso.He creado devtools-detectan que detecta cuando DevTools está abierto:
También puedes escuchar un evento:
No funciona cuando DevTools está desacoplado. Sin embargo, funciona con Chrome / Safari / Firefox DevTools y Firebug.
fuente
Encontré una manera de saber si Chrome Console está abierta o no. Todavía es un truco, pero es mucho más preciso y funcionará si la consola está desacoplada o no.
Básicamente, ejecutar este código con la consola cerrada tarda aproximadamente ~ 100 microsegundos y mientras la consola está abierta, tarda aproximadamente el doble ~ 200 microsegundos.
(1 milisegundo = 1000 microsegundos)
He escrito más sobre esto aquí .
La demo está aquí .
Actualizar:
@zswang ha encontrado la mejor solución actual - mira su respuesta
fuente
Si su objetivo es bloquear las herramientas del desarrollador, intente esto (encontré una versión más complicada en un lugar donde el código JS estaba ofuscado, es muy molesto):
fuente
Hay una forma complicada de verificar si hay extensiones con permiso de 'pestañas':
También puede verificar si está abierto para su página:
fuente
Escribí una publicación de blog sobre esto: http://nepjua.org/check-if-browser-console-is-open/
Puede detectar si está acoplado o desacoplado
fuente
fuente
test online
no funcionó.Las herramientas para desarrolladores de Chrome son realmente solo una parte de la biblioteca WebCore de WebKit. Entonces, esta pregunta se aplica a Safari, Chrome y cualquier otro consumidor de WebCore.
Si existe una solución, se basará en una diferencia en el DOM cuando el inspector web de WebKit esté abierto y cuando esté cerrado. Desafortunadamente, este es un tipo de problema de huevo y gallina porque no podemos usar el inspector para observar el DOM cuando el inspector está cerrado.
Lo que puede hacer es escribir un poco de JavaScript para volcar todo el árbol DOM. Luego ejecútelo una vez cuando el inspector esté abierto y una vez cuando el inspector esté cerrado. Cualquier diferencia en el DOM es probablemente un efecto secundario del inspector web, y podemos usarlo para probar si el usuario está inspeccionando o no.
Este enlace es un buen comienzo para un script de volcado DOM, pero querrá volcar todo el
DOMWindow
objeto, no solodocument
.Actualizar:
Parece que hay una manera de hacer esto ahora. Echa un vistazo a Chrome Inspector Detector
fuente
También puedes probar esto: https://github.com/sindresorhus/devtools-detect
fuente
Si son desarrolladores que están haciendo cosas durante el desarrollo. Mira esta extensión de Chrome. Te ayuda a detectar cuándo Chrome Devtoos está abierto o cerrado.
https://chrome.google.com/webstore/detail/devtools-status-detector/pmbbjdhohceladenbdjjoejcanjijoaa?authuser=1
Esta extensión ayuda a los desarrolladores de Javascript a detectar cuándo Chrome Devtools está abierto o cerrado en la página actual. Cuando Chrome Devtools se cierra / abre, la extensión generará un evento llamado 'devtoolsStatusChanged' en el elemento window.document.
Este es el código de ejemplo:
fuente
Algunas respuestas aquí dejarán de funcionar en Chrome 65. Aquí hay una alternativa de ataque de sincronización que funciona de manera bastante confiable en Chrome y es mucho más difícil de mitigar que el
toString()
método. Lamentablemente, no es tan confiable en Firefox.fuente
En cuanto a Chrome / 77.0.3865.75, una versión de 2019 no funciona. toString invoca inmediatamente sin la apertura del Inspector.
fuente
El enfoque de Muhammad Umer funcionó para mí, y estoy usando React, así que decidí hacer una solución de ganchos:
NOTA: Cuando estaba jugando con eso, no funcionó durante mucho tiempo y no podía entender por qué. Había eliminado lo
console.dir(element);
que es crítico para cómo funciona. Elimino la mayoría de las acciones de consola no descriptivas, ya que solo ocupan espacio y, por lo general, no son necesarias para la función, por eso no me funcionó.Para usarlo:
Espero que esto ayude a cualquiera que use React. Si alguien quiere ampliar esto, me gustaría poder detener el bucle infinito en algún momento (ya que no lo uso en todos los componentes) y encontrar una manera de mantener limpia la consola.
fuente