Quel est le moyen le plus sûr de détecter si un utilisateur a activé Firebug ?
Réponses
Trop de publicités?Réponse originale :
Vérifiez que le console
(créé uniquement avec Firebug), comme ceci :
if (window.console && window.console.firebug) {
//Firebug is enabled
}
Mise à jour (janvier 2012) :
Les développeurs de Firebug ont a décidé de supprimer window.console.firebug
. Vous pouvez toujours détecter la présence de Firebug en dactylographie du canard comme
if (window.console && (window.console.firebug || window.console.exception)) {
//Firebug is enabled
}
ou diverses autres approches comme
if (document.getUserData('firebug-Token')) ...
if (console.log.toString().indexOf('apply') != -1) ...
if (typeof console.assert(1) == 'string') ...
mais en général, il ne devrait pas y avoir besoin de le faire réellement.
À partir de la version 1.9.0 de Firebug, console.firebug
n'est plus défini en raison de problèmes de confidentialité ; voir notes de mise à jour , rapport de bogue . Cela casse les méthodes mentionnées ci-dessus. En effet, cela change la réponse à la question d'Allan en "il n'y a aucun moyen" ; s'il y a es d'une autre manière, c'est considéré comme un bug.
La solution consiste plutôt à vérifier la disponibilité des éléments suivants console.log
ou tout ce que vous voulez utiliser ou remplacer.
Voici une suggestion de remplacement pour le type de code que David Brockman présente ci-dessus, mais qui ne supprime aucune fonction existante.
(function () {
var names = ['log', 'debug', 'info', 'warn', 'error', 'assert', 'dir', 'dirxml',
'group', 'groupEnd', 'time', 'timeEnd', 'count', 'trace', 'profile', 'profileEnd'];
if (window.console) {
for (var i = 0; i < names.length; i++) {
if (!window.console[names[i]]) {
window.console[names[i]] = function() {};
}
}
} else {
window.console = {};
for (var i = 0; i < names.length; i++) {
window.console[names[i]] = function() {};
}
}
})();
Elle peut être impossible à détecter.
Firebug dispose de plusieurs onglets, qui peuvent être désactivés séparément, et qui ne sont désormais pas activés par défaut.
GMail, tel qu'il est, peut seulement dire si l'onglet "console" est activé ou non. Pour aller plus loin, il faudrait probablement contourner les règles de sécurité, ce que vous ne voulez pas faire.
Vous pouvez utiliser quelque chose comme ceci pour empêcher les appels de firebug dans votre code de provoquer des erreurs s'il n'est pas installé.
if (!window.console || !console.firebug) {
(function (m, i) {
window.console = {};
while (i--) {
window.console[m[i]] = function () {};
}
})('log debug info warn error assert dir dirxml trace group groupEnd time timeEnd profile profileEnd count'.split(' '), 16);
}