Javascript, который обнаруживает Firebug?

Какой верный способ определить, включен ли у пользователя Firebug?


person Allan    schedule 29.12.2008    source источник
comment
просто в сторону: для чего вам это нужно? Чтобы узнать, можно ли писать в консоль firebug или как?   -  person Andrei Rînea    schedule 31.10.2010


Ответы (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') ...

но в целом в этом не должно быть необходимости.

person Community    schedule 29.12.2008
comment
Помните, используйте свои способности во благо или во благо, но не наказывайте пользователей firebug, потому что это позволяет легко обойти любые действия «копировать» или «сохранить», которые могут быть им интересны. Это было бы плохой формой. - person matt lohkamp; 08.01.2009
comment
IIRC, использование console.log в Safari с включенным режимом разработчика также работает, поэтому утверждение «создано только с помощью firebug» может быть неверным. - person alex; 19.07.2009
comment
Safari действительно имеет консольный объект, но консоль Safari не имеет свойства firebug, и, таким образом, приведенное выше условие не будет выполнено в Safari, поэтому Firebug не будет обнаружен. - person Andreas Grech; 19.07.2009
comment
я только что реализовал это, и это действительно хорошая идея - отделить разработчиков от обычных пользователей на вашем сайте. например, сообщите им об API, который у вас есть для их использования! - person Luc; 01.03.2012
comment
@Luc: Вы имеете в виду разработчиков, которые используют Firefox с установленным Firebug. - person Andreas Grech; 01.03.2012

Если firebug включен, window.console не будет неопределенным. console.firebug вернет номер версии.

person ceejayoz    schedule 29.12.2008

Начиная с 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() {};
        }
    }
})();
person skagedal    schedule 08.01.2012
comment
Я отредактировал исходный ответ и добавил новые рабочие методы обнаружения. - person user123444555621; 18.01.2012

Это может быть невозможно обнаружить.

Firebug имеет несколько вкладок, которые можно отключить отдельно, и теперь они не включены по умолчанию.

GMail как таковой может только сказать, включена ли у меня вкладка «консоль». Дальнейшие исследования, скорее всего, потребуют обхода системы безопасности, а вы не хотите этого делать.

person Kent Fredric    schedule 29.12.2008

Вы можете использовать что-то подобное, чтобы предотвратить вызовы 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);
}
person David Brockman    schedule 30.12.2008
comment
Это действительно плохой стиль. Например, консоль разработчика Chrome поддерживает большинство (если не все) этих методов, но не имеет console.firebug. Поэтому приведенный выше код отключает прекрасно работающие консольные методы в консолях, отличных от Firebug, что отстой. - person scy; 06.07.2011

Имейте в виду, что в 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.

person Steve K    schedule 19.09.2010
comment
На самом деле, чтобы проверить, определено ли что-то, вы должны использовать «if (typeof window.console.firebug !== 'undefined'). - person scy; 06.07.2011

В настоящее время 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.

С наилучшими пожеланиями!

person Hao Dong    schedule 16.10.2013