Estou usando este pequeno script para descobrir se o Firebug está aberto:
if (window.console && window.console.firebug) {
//is open
};
E isso funciona bem. Agora, eu estava procurando por meia hora para encontrar uma maneira de detectar se o console do desenvolvedor da Web incorporado do Google Chrome está aberto, mas não consegui encontrar nenhuma dica.
Este:
if (window.console && window.console.chrome) {
//is open
};
não funciona
EDITAR:
Portanto, parece que não é possível detectar se o console do Chrome está aberto. Mas existe um " hack " que funciona, com algumas desvantagens:
- não funcionará quando o console estiver desencaixado
- não funcionará quando o console estiver aberto no carregamento da página
Então, eu vou escolher a resposta de Unsigned por enquanto, mas se alguém1 tiver uma idéia brilhante, ele poderá responder e eu altero a resposta selecionada! Obrigado!
.message
é buscado (o que acontece quando o depurador é aberto porque você vê a mensagem), mas infelizmente isso também acontece quando o depurador não é aberto. Eu gostaria de saber um truque para isso, se ela existe ...Respostas:
requestAnimationFrame (final de 2019)
Deixando aqui as respostas anteriores para o contexto histórico. Atualmente, a abordagem de Muhammad Umer funciona no Chrome 78, com a vantagem adicional de detectar eventos próximos e abertos.
função toString (2019)
Os nossos agradecimentos ao comentário de Overcl9ck nesta resposta. Substituir o regex
/./
por um objeto de função vazio ainda funciona.regex toString (2017-2018)
Como o solicitante original parece não estar mais por perto e esta ainda é a resposta aceita, adicionando esta solução para visibilidade. O crédito vai para o comentário de Antonin Hildebrand sobre a resposta de zswang . Esta solução tira proveito do fato de que não é chamado em objetos registrados, a menos que o console esteja aberto.
toString()
console.profiles (2013)
Atualização:
console.profiles
foi removida do Chrome. Esta solução não funciona mais.Agradecemos a Paul Irish por apontar esta solução no Discover DevTools , usando o criador de perfil:
window.innerHeight (2011)
Essa outra opção pode detectar a abertura do inspetor encaixado , após o carregamento da página, mas não será possível detectar um inspetor desencaixado ou se o inspetor já estava aberto no carregamento da página. Também existe algum potencial para falsos positivos.
fonte
function() {}
em vez de um regexChrome 65+ (2018)
demo: https://jsbin.com/cecuzeb/edit?output (atualização em 16/03/2018)
pacote: https://github.com/zswang/jdetects
Ao imprimir as ferramentas de desenvolvedor do Chrome "Element", ele recebe seu ID
Outra versão (dos comentários)
Imprima uma variável regular:
fonte
__defineGetter__
está obsoleta, então mudei paraObject.defineProperty(element, 'id', {get:function() {checkStatus='on';}});
... ainda funcionando.setInterval
Corte muito confiável
Defina basicamente um getter na propriedade e faça logon no console. Aparentemente, a coisa só é acessada quando o console está aberto.
https://jsfiddle.net/gcdfs3oo/44/
fonte
throw new Error("Dev tools checker");
? Porque funciona sem ele.Criei o devtools-detect que detecta quando o DevTools está aberto:
Você também pode ouvir um evento:
Não funciona quando o DevTools está desencaixado. No entanto, funciona com o DevTools do Chrome / Safari / Firefox e o Firebug.
fonte
Encontrei uma maneira de saber se o Chrome Console está aberto ou não. Ainda é um truque, mas é muito mais preciso e funcionará quando o console estiver desencaixado ou não.
Basicamente, a execução desse código com o console fechado leva cerca de ~ 100 microssegundos e, enquanto o console é aberto, leva cerca de duas vezes mais ~ 200 microssegundos.
(1 milissegundo = 1000 microssegundos)
Eu escrevi mais sobre isso aqui .
A demonstração está aqui .
Atualizar:
@zswang encontrou a melhor solução atual - confira sua resposta
fonte
Se seu objetivo é bloquear as ferramentas do desenvolvedor, tente isso (eu achei uma versão mais complicada em um local onde o código JS estava ofuscado, é muito irritante):
fonte
Existe uma maneira complicada de verificar extensões com a permissão 'tabs':
Além disso, você pode verificar se está aberto para sua página:
fonte
Eu escrevi um post sobre isso: http://nepjua.org/check-if-browser-console-is-open/
Ele pode detectar se está encaixado ou desencaixado
fonte
fonte
test online
não funcionou.As ferramentas de desenvolvedor do Chrome são realmente apenas uma parte da biblioteca WebCore do WebKit. Portanto, esta pergunta se aplica ao Safari, Chrome e outros consumidores da WebCore.
Se existir uma solução, ela será baseada na diferença no DOM quando o inspetor da Web WebKit estiver aberto e fechado. Infelizmente, esse é um tipo de problema de galinha e ovo, porque não podemos usar o inspetor para observar o DOM quando o inspetor está fechado.
O que você pode fazer é escrever um pouco de JavaScript para despejar toda a árvore do DOM. Em seguida, execute-o uma vez quando o inspetor estiver aberto e uma vez quando o inspetor estiver fechado. Qualquer diferença no DOM provavelmente é um efeito colateral do inspetor da web, e podemos usá-lo para testar se o usuário está inspecionando ou não.
Esse link é um bom começo para um script de dumping do DOM, mas você deseja despejar o
DOMWindow
objeto inteiro , não apenasdocument
.Atualizar:
Parece que há uma maneira de fazer isso agora. Confira o Chrome Inspector Detector
fonte
Além disso, você pode tentar o seguinte: https://github.com/sindresorhus/devtools-detect
fonte
Se você é desenvolvedor que faz coisas durante o desenvolvimento. Confira esta extensão do Chrome. Ajuda a detectar quando o Chrome Devtoos é aberto ou fechado.
https://chrome.google.com/webstore/detail/devtools-status-detector/pmbbjdhohceladenbdjjoejcanjijoaa?authuser=1
Esta extensão ajuda os desenvolvedores de Javascript a detectar quando o Chrome Devtools está aberto ou fechado na página atual. Quando o Chrome Devtools fecha / abre, a extensão gera um evento chamado 'devtoolsStatusChanged' no elemento window.document.
Este é um código de exemplo:
fonte
Algumas respostas aqui param de funcionar no Chrome 65. Aqui está uma alternativa de ataque de tempo que funciona de maneira bastante confiável no Chrome e é muito mais difícil de mitigar do que o
toString()
método. Infelizmente, não é tão confiável no Firefox.fonte
Quanto ao Chrome / 77.0.3865.75, uma versão do 2019 não funciona. toString chama imediatamente sem a abertura do Inspetor.
fonte
A abordagem de Muhammad Umer funcionou para mim, e eu estou usando o React, então decidi fazer uma solução de ganchos:
NOTA: Quando eu estava mexendo com isso, não funcionou por muito tempo e não consegui descobrir o porquê. Eu havia excluído, o
console.dir(element);
que é fundamental para como ele funciona. Excluo a maioria das ações não descritivas do console, pois elas ocupam espaço e geralmente não são necessárias para a função, por isso não funcionou para mim.Para usá-lo:
Espero que isso ajude quem usa o React. Se alguém quiser expandir isso, eu gostaria de poder parar o loop infinito em algum momento (já que não uso isso em todos os componentes) e encontrar uma maneira de manter o console limpo.
fonte