Quel est le moyen le plus sûr de détecter si un utilisateur a Firebug activé?
Recherchez l'objet console
(créé uniquement avec Firebug), tel que:
if (window.console && window.console.firebug) {
//Firebug is enabled
}
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.
Si firebug est activé, window.console ne sera pas indéfini. console.firebug renverra le numéro de version.
À 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() {};
}
}
})();
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.
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);
}
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.
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!