


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если включен firebug, window.console не будет неопределенным. console.firebug вернет номер версии.
Проверьте объект console (созданный только с помощью Firebug), например:
if (window.console && window.console.firebug) {
//Firebug is enabled
}
У разработчиков 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, потому что это позволяет легко обходить любые действия «копирования» или «сохранения», в которых они могут быть заинтересованы. Это было бы дурным тоном.
IIRC, использование console.info в Safari с включенным режимом разработчика также работает - поэтому утверждение май «создано только с помощью firebug» неверно.
Safari действительно имеет объект консоли, но консоль Safari не имеет свойства firebug, и, таким образом, вышеуказанное условие не будет выполнено в Safari, таким образом не обнаружив Firebug.
Я только что реализовал это, и это действительно хорошая идея - отделить разработчиков от обычных пользователей на вашем сайте. например, сообщив им об имеющемся у вас API!
@Luc: Вы имеете в виду разработчиков, которые используют Firefox с установленным Firebug.
Это может быть невозможно обнаружить.
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, что отстой.
Имейте в виду, что в 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')».
Начиная с 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() {};
}
}
})();
Я отредактировал исходный ответ и добавил новые, работающие методы обнаружения.
В настоящее время ошибка 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.
С наилучшими пожеланиями!
Просто в сторону: зачем вам это нужно? Чтобы узнать, можно ли писать в консоль firebug или как?