Was ist eine todsichere Methode, um festzustellen, ob ein Benutzer Firebug aktiviert hat?
javascript
firebug
Allan
quelle
quelle
Antworten:
Ursprüngliche Antwort:
Suchen Sie nach dem
console
Objekt (nur mit Firebug erstellt) wie folgt:if (window.console && window.console.firebug) { //Firebug is enabled }
Update (Januar 2012):
Die Firebug-Entwickler haben beschlossen, zu entfernen
window.console.firebug
. Sie können das Vorhandensein von Firebug immer noch erkennen, indem Sie wie Ente tippenif (window.console && (window.console.firebug || window.console.exception)) { //Firebug is enabled }
oder verschiedene andere Ansätze wie
if (document.getUserData('firebug-Token')) ... if (console.log.toString().indexOf('apply') != -1) ... if (typeof console.assert(1) == 'string') ...
Im Allgemeinen sollte dies jedoch nicht erforderlich sein.
quelle
firebug
Eigenschaft, und daher schlägt die obige Bedingung in Safari fehl und erkennt Firebug nichtWenn Firebug aktiviert ist, ist window.console nicht undefiniert. console.firebug gibt die Versionsnummer zurück.
quelle
Ab Firebug Version 1.9.0
console.firebug
ist dies aus Datenschutzgründen nicht mehr definiert. Siehe Versionshinweise , Fehlerbericht . Dies bricht die oben genannten Methoden. In der Tat ändert es die Antwort auf Allans Frage in "Es gibt keinen Weg"; wenn es ist eine andere Art und Weise, ist es ein Fehler betrachtet.Die Lösung besteht stattdessen darin, die Verfügbarkeit von zu überprüfen
console.log
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 vorstellt, 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() {}; } } })();
quelle
Es kann unmöglich sein, zu erkennen.
Firebug verfügt über mehrere Registerkarten, die möglicherweise separat deaktiviert werden und jetzt standardmäßig nicht aktiviert sind.
GMail kann nur sagen, ob ich die Registerkarte "Konsole" aktiviert habe oder nicht. Eine weitere Prüfung würde wahrscheinlich eine Sicherheitsumgehung erfordern, und Sie möchten nicht dorthin gehen.
quelle
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); }
quelle
Beachten Sie, dass in Chrome window.console auch true oder [zurückgegeben wird
Object console]
.Außerdem würde ich prüfen, ob Firebug mit installiert ist
if (window.console.firebug !== undefined) // firebug is installed
Unten ist, was ich in Safari und Chrome bekomme, kein 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 üben offensichtlich Zwang aus, was in JavaScript vermieden werden sollte.
quelle
Derzeit wurde die window.console.firebug von der neuesten Firebug-Version entfernt. weil firebug ein erweiterungsbasierter JavaScript-Debugger ist, der eine neue Funktion oder ein neues Objekt in window.console definiert hat. In den meisten Fällen können Sie diese neu definierten Funktionen nur verwenden, um den laufenden Status von Firebug zu erkennen.
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 diesen Ansatz in jedem Firebug testen.
Die besten Wünsche!
quelle