Какой верный способ определить, включен ли у пользователя Firebug?
Javascript, который обнаруживает Firebug?
Ответы (7)
Оригинальный ответ:
Проверьте наличие объекта console
(созданного только с помощью Firebug), например:
if (window.console && window.console.firebug) {
//Firebug is enabled
}
Обновление (январь 2012 г.):
Разработчики Firebug решили удалить window.console.firebug
. Вы по-прежнему можете обнаружить наличие Firebug, утиный ввод, например
if (window.console && (window.console.firebug || window.console.exception)) {
//Firebug is enabled
}
или другие подходы, например
if (document.getUserData('firebug-Token')) ...
if (console.log.toString().indexOf('apply') != -1) ...
if (typeof console.assert(1) == 'string') ...
но в целом в этом не должно быть необходимости.
firebug
, и, таким образом, приведенное выше условие не будет выполнено в Safari, поэтому Firebug не будет обнаружен.
- person Andreas Grech; 19.07.2009
Если firebug включен, window.console не будет неопределенным. console.firebug вернет номер версии.
Начиная с Firebug версии 1.9.0, console.firebug
больше не определяется из соображений конфиденциальности; см. примечания к выпуску, отчет об ошибке. Это нарушает вышеупомянутые методы. Действительно, это меняет ответ на вопрос Аллана на "нет никакого способа"; если есть есть другой способ, это считается ошибкой.
Вместо этого решение состоит в том, чтобы проверить наличие console.log
или того, что вы хотите использовать или заменить.
Вот предложение по замене того типа кода, который Дэвид Брокман представляет выше, но такого, который не удаляет какие-либо существующие функции.
(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() {};
}
}
})();
Это может быть невозможно обнаружить.
Firebug имеет несколько вкладок, которые можно отключить отдельно, и теперь они не включены по умолчанию.
GMail как таковой может только сказать, включена ли у меня вкладка «консоль». Дальнейшие исследования, скорее всего, потребуют обхода системы безопасности, а вы не хотите этого делать.
Вы можете использовать что-то подобное, чтобы предотвратить вызовы firebug в вашем коде, вызывающие ошибки, если он не установлен.
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);
}
Имейте в виду, что в Chrome window.console также возвращает true или [Object console]
.
Кроме того, я бы проверил, установлен ли Firebug с
if (window.console.firebug !== undefined) // firebug is installed
Ниже показано, что я получаю в Safari и Chrome без установленного firebug.
if (window.console.firebug) // true
if (window.console.firebug == null) // true
if (window.console.firebug === null) // false
Очевидно, что операторы Is-True и Is-Not выполняют приведение типов, чего следует избегать в JavaScript.
В настоящее время window.console.firebug удален последней версией firebug. потому что firebug - это отладчик JavaScript на основе расширений, который определяет некоторую новую функцию или объект в window.console. Таким образом, в большинстве случаев вы можете использовать эти новые определенные функции только для определения текущего состояния firebug.
Такие как
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!");
Вы можете протестировать этот подход в каждом firebug.
С наилучшими пожеланиями!