68 votes

Javascript qui détecte Firebug ?

Quel est le moyen le plus sûr de détecter si un utilisateur a activé Firebug ?

87voto

Andreas Grech Points 39188

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.

20voto

ceejayoz Points 85962

Si firebug est activé, window.console ne sera pas indéfini. console.firebug retournera le numéro de version.

9voto

skagedal Points 336

À 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() {};
        }
    }
})();

4voto

Kent Fredric Points 35592

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.

3voto

David Brockman Points 492

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);
}

Prograide.com

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.

Powered by:

X