J'utilise ce petit script pour savoir si Firebug est ouvert:
if (window.console && window.console.firebug) {
//is open
};
Et ça marche bien. Maintenant, je cherchais une demi-heure pour trouver un moyen de détecter si la console de développement Web intégrée à Google Chrome était ouverte, mais je n'ai trouvé aucun indice.
Ce:
if (window.console && window.console.chrome) {
//is open
};
ne fonctionne pas.
ÉDITER:
Il semble donc qu'il n'est pas possible de détecter si la console Chrome est ouverte. Mais il y a un " hack " qui fonctionne, avec quelques inconvénients:
- ne fonctionnera pas lorsque la console est désancrée
- ne fonctionnera pas lorsque la console est ouverte lors du chargement de la page
Donc, je vais choisir la réponse de Unsigned pour le moment, mais si quelqu'un a une idée géniale, il est le bienvenu pour toujours répondre et je change la réponse choisie! Merci!
.message
est récupérée (ce qui se produit lorsque le débogueur est ouvert parce que vous voyez le message), mais malheureusement, cela se produit également lorsque le débogueur n'est pas ouvert. Je voudrais connaître un hack pour cela s'il existe ...Réponses:
requestAnimationFrame (fin 2019)
Laissant ces réponses précédentes ici pour le contexte historique. Actuellement, l'approche de Muhammad Umer fonctionne sur Chrome 78, avec l'avantage supplémentaire de détecter les événements fermés et ouverts.
fonction toString (2019)
Crédit au commentaire d' Overcl9ck sur cette réponse. Le remplacement de l'expression régulière
/./
par un objet de fonction vide fonctionne toujours.regex toString (2017-2018)
Étant donné que le demandeur d'origine ne semble plus être là et que c'est toujours la réponse acceptée, l'ajout de cette solution pour la visibilité. Le crédit va à Antonin Hildebrand est un commentaire sur zswang 's réponse . Cette solution tire parti du fait qu'elle
toString()
n'est appelée sur les objets journalisés que si la console est ouverte.console.profiles (2013)
Mise à jour:
console.profiles
a été supprimé de Chrome. Cette solution ne fonctionne plus.Merci à Paul Irish d' avoir souligné cette solution de Discover DevTools , en utilisant le profileur:
window.innerHeight (2011)
Cette autre option peut détecter l' ouverture de l' inspecteur ancré , après le chargement de la page, mais ne pourra pas détecter un inspecteur non ancré, ou si l'inspecteur était déjà ouvert lors du chargement de la page. Il existe également un potentiel de faux positifs.
la source
function() {}
expressionChrome 65+ (2018)
démo: https://jsbin.com/cecuzeb/edit?output (mise à jour le 16/03/2018)
paquet: https://github.com/zswang/jdetects
Lors de l'impression de "Element", les outils de développement Chrome obtiendront son identifiant
Une autre version (à partir des commentaires)
Imprimer une variable régulière :
la source
__defineGetter__
est obsolète, donc j'ai changé pourObject.defineProperty(element, 'id', {get:function() {checkStatus='on';}});
... toujours travailler.setInterval
Hack très fiable
En gros, définissez un getter sur la propriété et connectez-le dans la console. Apparemment, la chose n'est accessible que lorsque la console est ouverte.
https://jsfiddle.net/gcdfs3oo/44/
la source
throw new Error("Dev tools checker");
sert? Parce que ça marche sans ça.J'ai créé devtools-detect qui détecte quand DevTools est ouvert:
Vous pouvez également écouter un événement:
Cela ne fonctionne pas lorsque DevTools est désancré. Cependant, fonctionne avec Chrome / Safari / Firefox DevTools et Firebug.
la source
J'ai trouvé un moyen de savoir si la console Chrome est ouverte ou non. C'est toujours un hack, mais c'est beaucoup plus précis et fonctionnera si la console n'est pas ancrée ou non.
Fondamentalement, exécuter ce code avec la console fermée prend environ 100 microsecondes et pendant que la console est ouverte, cela prend environ deux fois plus d'environ 200 microsecondes.
(1 milliseconde = 1000 microseconde)
J'en ai écrit plus ici .
La démo est là .
Mettre à jour:
@zswang a trouvé la meilleure solution actuelle - découvrez sa réponse
la source
Si votre objectif est de brouiller les outils de développement, essayez ceci (j'en ai trouvé une version plus compliquée à un endroit où le code JS était obscurci, c'est très ennuyeux):
la source
Il existe un moyen délicat de vérifier les extensions avec l'autorisation `` onglets '':
Vous pouvez également vérifier s'il est ouvert pour votre page:
la source
J'ai écrit un article de blog à ce sujet: http://nepjua.org/check-if-browser-console-is-open/
Il peut détecter s'il est ancré ou non
la source
la source
test online
n'a pas fonctionné.Les outils de développement Chrome ne sont en réalité qu'une partie de la bibliothèque WebCore de WebKit. Cette question s'applique donc à Safari, Chrome et à tout autre consommateur WebCore.
Si une solution existe, elle sera basée sur une différence dans le DOM lorsque l'inspecteur Web WebKit est ouvert et lorsqu'il est fermé. Malheureusement, c'est une sorte de problème de poule et d'œuf car nous ne pouvons pas utiliser l'inspecteur pour observer le DOM lorsque l'inspecteur est fermé.
Ce que vous pouvez faire est d'écrire un peu de JavaScript pour vider toute l'arborescence DOM. Exécutez-le ensuite une fois lorsque l'inspecteur est ouvert et une fois lorsque l'inspecteur est fermé. Toute différence dans le DOM est probablement un effet secondaire de l'inspecteur Web, et nous pourrons peut-être l'utiliser pour tester si l'utilisateur inspecte ou non.
Ce lien est un bon début pour un script de vidage DOM, mais vous voudrez vider l'
DOMWindow
objet entier , pas seulementdocument
.Mettre à jour:
On dirait qu'il existe un moyen de le faire maintenant. Découvrez Chrome Inspector Detector
la source
Vous pouvez également essayer ceci: https://github.com/sindresorhus/devtools-detect
la source
L'approche de Muhammad Umer a fonctionné pour moi, et j'utilise React, j'ai donc décidé de créer une solution de hooks:
REMARQUE: quand je l'ai joué, cela n'a pas fonctionné pendant très longtemps et je ne pouvais pas comprendre pourquoi. J'avais supprimé
console.dir(element);
ce qui est essentiel à son fonctionnement. Je supprime la plupart des actions de console non descriptives car elles prennent juste de l'espace et ne sont généralement pas nécessaires à la fonction, c'est pourquoi cela ne fonctionnait pas pour moi.Pour l'utiliser:
J'espère que cela aidera quiconque utilise React. Si quelqu'un veut développer cela, j'aimerais pouvoir arrêter la boucle infinie à un moment donné (puisque je ne l'utilise pas dans chaque composant) et trouver un moyen de garder la console propre.
la source
Si vous êtes des développeurs qui font des choses pendant le développement. Découvrez cette extension Chrome. Il vous aide à détecter quand Chrome Devtoos est ouvert ou fermé.
https://chrome.google.com/webstore/detail/devtools-status-detector/pmbbjdhohceladenbdjjoejcanjijoaa?authuser=1
Cette extension aide les développeurs Javascript à détecter quand Chrome Devtools est ouvert ou fermé sur la page en cours. Lorsque Chrome Devtools se ferme / s'ouvre, l'extension déclenche un événement nommé 'devtoolsStatusChanged' sur l'élément window.document.
Voici un exemple de code:
la source
Certaines réponses ici cesseront de fonctionner dans Chrome 65. Voici une alternative d'attaque temporelle qui fonctionne de manière assez fiable dans Chrome et qui est beaucoup plus difficile à atténuer que la
toString()
méthode. Malheureusement, ce n'est pas si fiable dans Firefox.la source
Quant à Chrome / 77.0.3865.75, une version de 2019 ne fonctionne pas. toString invoque immédiatement sans l'ouverture de l'inspecteur.
la source