Le site Web de Samy Kamkar, http://samy.pl , sait quand la console est ouverte et efface la source / console quand elle s'ouvre.
Comment cela marche-t-il?
Le site Web de Samy Kamkar, http://samy.pl , sait quand la console est ouverte et efface la source / console quand elle s'ouvre.
Comment cela marche-t-il?
Cela a pris quelques recherches. samy.pl a plusieurs niveaux d'indirection et de dissimulation sur le dessus de ce code. Il utilise une version différente de la détection de code que le dépôt GitHub trouvé par JohanP. Le code de la samy.pl contrairement au dépôt GitHub, peut détecter les devtools quand ils ne sont pas à quai.
Il le fait en utilisant un petit script qui s'exécute de manière différente selon que devtools est ouvert ou fermé.
Voici un exemple; l'ouvrir dans un navigateur et remarquez comment les changements de sortie comme les devtools sont ouverts et fermés (si il est connecté ou pas):
<!DOCTYPE html>
<html>
<body>
<pre id="output"></pre>
<script type="text/javascript">
var element = new Image;
var devtoolsOpen = false;
element.__defineGetter__("id", function() {
devtoolsOpen = true; // This only executes when devtools is open.
});
setInterval(function() {
devtoolsOpen = false;
console.log(element);
document.getElementById('output').innerHTML += (devtoolsOpen ? "dev tools is open\n" : "dev tools is closed\n");
}, 1000);
</script>
</body>
</html>
La fonction setInterval est exécuté à chaque seconde. console.log
s'exécute toujours, si les devtools sont ouverts ou fermés: L' console
objet est toujours défini. Cependant, l' log
méthode que les écritures de sortie de la console lors de la devtools sont ouverts. Si les devtools sont fermés, console.log
est un no-op. C'est la clé qui vous permet de détecter si le devtools sont ouverts: détecter si l'opération de journal est un no-op.
Dans le processus de rédaction element
à la console, il récupère l'id de l'élément. Qui appelle la fonction attachée avec de la __defineGetter__
. Par conséquent, console.log(element)
uniquement les appels de la fonction lorsque la devtools sont ouverts et console.log
n'est pas un no-op. L'indicateur est défini dans cette fonction, nous donnant une vision à jour de la devtools état à chaque seconde.
samy.pl utilise quelques autres astuces pour masquer cette: la console est également effacé à chaque seconde, et ce code est brouillée avec un espace (!) l'encodage.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.