JavaScript, который обнаруживает Firebug? - PullRequest
68 голосов
/ 29 декабря 2008

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

Ответы [ 7 ]

87 голосов
/ 29 декабря 2008

Оригинальный ответ:

Проверьте объект console (созданный только с помощью Firebug), например:

if (window.console && window.console.firebug) {
  //Firebug is enabled
}

Обновление (январь 2012 г.):

Разработчики Firebug решили удалить window.console.firebug. Вы все еще можете обнаружить присутствие Firebug, набрав duck like

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') ...

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

20 голосов
/ 29 декабря 2008

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

9 голосов
/ 09 января 2012

Начиная с 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() {};
        }
    }
})();
4 голосов
/ 29 декабря 2008

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

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

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

3 голосов
/ 30 декабря 2008

Вы можете использовать что-то подобное, чтобы предотвратить появление ошибок кода в вашем коде, если он не установлен.

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);
}
2 голосов
/ 19 сентября 2010

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

0 голосов
/ 16 октября 2013

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

Вы можете проверить эти подходы в каждом клопе.

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

...