it-swarm.com.de

Javascript, das Firebug erkennt?

Was ist eine todsichere Methode, um festzustellen, ob ein Benutzer Firebug aktiviert hat?

68
Allan

Ursprüngliche Antwort:

Suchen Sie nach dem console-Objekt (nur mit Firebug erstellt), z.

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

Update (Januar 2012):

Die Firebug-Entwickler haben beschlossen, window.console.firebug zu entfernen. Sie können das Vorhandensein von Firebug weiterhin erkennen, indem Sie duck type like

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

oder verschiedene andere Ansätze gefällt

if (document.getUserData('firebug-Token')) ...
if (console.log.toString().indexOf('apply') != -1) ...
if (typeof console.assert(1) == 'string') ...

im Allgemeinen sollte dies jedoch nicht unbedingt erforderlich sein.

87
Andreas Grech

Wenn Firebug aktiviert ist, ist window.console nicht undefiniert. console.firebug gibt die Versionsnummer zurück.

20
ceejayoz

Seit Firebug Version 1.9.0 ist console.firebug aus Datenschutzgründen nicht mehr definiert. Siehe Versionshinweise , Fehlerbericht . Dies bricht die oben genannten Methoden. Tatsächlich ändert sich die Antwort auf Allans Frage in "es gibt keinen Weg"; Wenn ist auf eine andere Weise vorhanden ist, wird dies als Fehler betrachtet.

Die Lösung besteht stattdessen darin, zu prüfen, ob console.log verfügbar ist oder was auch immer Sie verwenden oder ersetzen möchten.

Hier ist ein Vorschlag für einen Ersatz für die Art von Code, den David Brockman oben präsentiert, der jedoch keine vorhandenen Funktionen entfernt. 

(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

Es kann unmöglich sein, dies zu erkennen. 

Firebug hat mehrere Registerkarten, die separat deaktiviert werden können und jetzt standardmäßig nicht aktiviert sind. 

GMail kann nur feststellen, ob die Registerkarte "Konsole" aktiviert ist oder nicht. Wenn Sie weiter suchen, ist wahrscheinlich eine Sicherheitsumgehung erforderlich, und Sie möchten nicht dorthin gehen. 

4
Kent Fredric

Sie können so etwas verwenden, um zu verhindern, dass Firebug-Aufrufe in Ihrem Code Fehler verursachen, wenn er nicht installiert ist.

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

Denken Sie in Chrome an window.console gibt auch true oder [Object console] zurück.

Außerdem würde ich prüfen, ob Firebug mit installiert ist 

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

Nachfolgend bekomme ich in Safari und Chrome keinen Firebug installiert.

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

Die Is-True- und Is-Not-Operatoren geben offensichtlich Zwang, der in JavaScript vermieden werden sollte.

2
nottinhill

Derzeit wurde der window.console.firebug von der neuesten Firebug-Version entfernt. weil firebug ein erweiterungsbasierter JavaScript-Debugger ist, der einige neue Funktionen oder Objekte in window.console definierte. In den meisten Fällen können Sie diese neuen definierten Funktionen nur zur Erkennung des Status von Firebug verwenden.

sowie

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!");

Sie können diese Vorgehensweise in jedem Firebug testen. 

Schöne Grüße!

0
Hao Dong