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

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

Просто в сторону: зачем вам это нужно? Чтобы узнать, можно ли писать в консоль firebug или как?

Andrei Rînea 31.10.2010 23:12
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
68
1
14 738
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

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

Ответ принят как подходящий

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

Проверьте объект 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.info.toString().indexOf('apply') != -1) ...
if (typeof console.assert(1) == 'string') ...

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

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

matt lohkamp 08.01.2009 15:12

IIRC, использование console.info в Safari с включенным режимом разработчика также работает - поэтому утверждение май «создано только с помощью firebug» неверно.

alex 19.07.2009 16:09

Safari действительно имеет объект консоли, но консоль Safari не имеет свойства firebug, и, таким образом, вышеуказанное условие не будет выполнено в Safari, таким образом не обнаружив Firebug.

Andreas Grech 19.07.2009 17:03

Я только что реализовал это, и это действительно хорошая идея - отделить разработчиков от обычных пользователей на вашем сайте. например, сообщив им об имеющемся у вас API!

Luc 01.03.2012 13:49

@Luc: Вы имеете в виду разработчиков, которые используют Firefox с установленным Firebug.

Andreas Grech 01.03.2012 16:50

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

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 поддерживает большинство (если не все) из этих методов, но не имеет console.firebug. Следовательно, приведенный выше код отключает идеально работающие методы консоли в консолях без Firebug, что отстой.

scy 06.07.2011 17:03

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

На самом деле, чтобы проверить, определено ли что-то, вы должны использовать «if (typeof window.console.firebug! == 'undefined')».

scy 06.07.2011 17:06

Начиная с Firebug версии 1.9.0, console.firebug больше не определяется из соображений конфиденциальности; см. примечания к выпуску, отчет об ошибке. Это нарушает вышеупомянутые методы. Действительно, он меняет ответ на вопрос Аллана на «нет пути»; если есть является по-другому, это считается ошибкой.

Вместо этого решение состоит в том, чтобы проверить наличие console.info или того, что вы хотите использовать или заменить.

Вот предложение по замене кода, представленного Дэвидом Брокманом выше, но не удаляющего никаких существующих функций.

(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() {};
        }
    }
})();

Я отредактировал исходный ответ и добавил новые, работающие методы обнаружения.

user123444555621 18.01.2012 17:24

В настоящее время ошибка window.console.firebug удалена последней версией firebug. потому что firebug - это отладчик JavaScript на основе расширения, который определил некоторую новую функцию или объект в window.console. Поэтому в большинстве случаев вы можете использовать эти новые определенные функции только для определения текущего статуса firebug.

такой как

if (console.assert(1) === '_firebugIgnore') alert("firebug is running!"); 
if ((console.info+'''').indexOf('return Function.apply.call(x.log, x, arguments);') !== -1)  alert("firebug is running!");

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

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

Другие вопросы по теме