Was ist eine todsichere Methode, um festzustellen, ob ein Benutzer Firebug aktiviert hat?
Antworten:
Suchen Sie nach dem console
Objekt (nur mit Firebug erstellt) wie folgt:
if (window.console && window.console.firebug) {
//Firebug is enabled
}
Die Firebug-Entwickler haben beschlossen, zu entfernenwindow.console.firebug
. Sie können das Vorhandensein von Firebug immer noch erkennen, indem Sie wie Ente tippen
if (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.
firebug
Eigenschaft, und daher schlägt die obige Bedingung in Safari fehl und erkennt Firebug nicht
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() {};
}
}
})();
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.
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);
}
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.
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!