web-dev-qa-db-fra.com

Javascript qui détecte Firebug?

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

68
Allan

Réponse originale:

Recherchez l'objet console (créé uniquement avec Firebug), tel que:

if (window.console && window.console.firebug) {
  //Firebug is enabled
}

Mise à jour (janvier 2012):

Les développeurs de Firebug ont décidé de supprimer window.console.firebug . Vous pouvez toujours détecter la présence de Firebug par en tapant du canard like

if (window.console && (window.console.firebug || window.console.exception)) {
  //Firebug is enabled
}

ou diverses autres approches like

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 être nécessaire de le faire.

87
Andreas Grech

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

20
ceejayoz

À partir de la version 1.9.0 de Firebug, console.firebug n'est plus défini pour des raisons de confidentialité. voir notes de publication , rapport de bogue . Ceci rompt les méthodes mentionnées ci-dessus. En effet, cela change la réponse à la question d'Allan en "il n'y a pas moyen"; si est d'une autre manière, c'est considéré comme un bug.

La solution consiste plutôt à vérifier la disponibilité de console.log ou de tout autre élément que vous souhaitez utiliser ou remplacer.

Voici une suggestion pour remplacer le type de code présenté par David Brockman 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() {};
        }
    }
})();
9
skagedal

Il peut être impossible de détecter. 

Firebug a plusieurs onglets, qui peuvent être désactivés séparément, et maintenant ne sont pas activés par défaut. 

GMail comme il est ne peut dire si oui ou non j'ai l'onglet « console » activée. Sonder plus loin que cela exigerait probablement le contournement de la sécurité, et vous ne voulez pas y aller. 

4
Kent Fredric

Vous pouvez utiliser quelque chose comme ceci pour empêcher les appels firebug dans votre code de causer 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);
}
3
David Brockman

Gardez à l'esprit que dans Chrome, window.console renvoie également true ou [Object console].

De plus, je vérifierais si Firebug est installé avec 

if (window.console.firebug !== undefined) // firebug is installed

Voici ce que j'ai dans Safari et Chrome, aucun firebug n’est installé.

if (window.console.firebug) // true
if (window.console.firebug == null) // true
if (window.console.firebug === null) // false

Les opérateurs Is-True et Is-Not pratiquent évidemment la coercition, ce qui devrait être évité en JavaScript.

2
nottinhill

Actuellement, le fichier window.console.firebug a été supprimé de la dernière version de Firebug. car firebug est un débogueur JavaScript basé sur une extension, qui a défini une nouvelle fonction ou un nouvel objet dans window.console. Donc, la plupart du temps, vous ne pouvez utiliser ces nouvelles fonctions définies que pour détecter l'état de fonctionnement de firebug.

tel que

if(console.assert(1) === '_firebugIgnore') alert("firebug is running!"); 
if((console.log+'''').indexOf('return Function.apply.call(x.log, x, arguments);') !== -1)  alert("firebug is running!");

Vous pouvez tester ces approches dans chaque firebug. 

Meilleurs vœux!

0
Hao Dong