игнорировать консоль firebug, если она не установлена - PullRequest
6 голосов
/ 14 января 2010

Я использую консоль Firebug.log () для отладки моего сайта. Если я пытаюсь просмотреть свой веб-сайт в браузерах без Firebug, я получаю консоль не определена ошибка. Есть ли способ изящно избежать этой ошибки?

Я нашел это потенциальное решение , но оно кажется немного громоздким. А идеи?

Ответы [ 9 ]

17 голосов
/ 14 января 2010

Исходный код Firebug предоставляет файл для этого:

См. firebugx.js

Не изобретайте велосипед каждый день:)

4 голосов
/ 29 апреля 2010

Я всегда создаю свои кросс-браузерные оболочки для функций console.log, и это выглядит так:

function log(a){
try{
  console.log(a);
  }catch(er){
   try{
     window.opera.postError(a);
     }catch(er){
     //no console avaliable. put 
     //alert(a) here or write to a document node or just ignore
     }
  }

}

Может быть расширен для любых браузеров. в IE, когда в отладке я бы рекомендовал поместить этот код jquery в последний улов:

<code>$('body').append('<pre>'+JSON.serialize(a)+'
');

Вы должны добавить JSON.serialize в Ваш скрипт. IE не имеет (IE8 может иметь, я не уверен)

3 голосов
/ 14 января 2010

Связанное решение в основном является вариантом (с несколькими дополнительными функциями) этого:

РЕДАКТИРОВАТЬ Приведенный ниже код на самом деле не работает, когда присутствует Firefox.Это научит публиковать код без проверки, просто чтобы показать мой не очень 1337 оператор || skillz:

window.console = window.console || {};
console.log = function(){};

Причина этого в том, что консоль Firefox на самом деле является только геттером свойство за окном.Следовательно, мы не можем установить это.Вместо этого нужно использовать что-то вроде этого:

if (!window.console) {
  window.console = {};
  window.console.log = function(){};
}

Кроме того, console.logconsole.warn, console.error) будут работать в браузерах Webkit, включая мобильный Safari, довольно круто, да?

2 голосов
/ 14 января 2010

Честно, я бы этим воспользовался. Он охватывает не только console.log(), но также и любой другой метод console и довольно короткое количество строк. Тот факт, что он был впервые использован в медиаплеере Yahoo, по-видимому, говорит о том, что он отлично работает и в кросс-браузерном режиме.

Этот бит кода - ваша лучшая ставка, на самом деле он прилично элегантен и должен работать в большинстве случаев. Если вы прокомментируете выше фрагмент только для чего он предназначен (чтобы не запутывать будущих разработчиков), у вас все будет в порядке.

2 голосов
/ 14 января 2010

Не думаю, что это станет намного лучше, чем обходной путь, на который вы ссылаетесь. Конечно, можно смешать его до определения console.log() и оставить в покое, но, по сути, вы не сможете обойти такую ​​конструкцию.

Единственная альтернатива, которая приходит в голову, это проверять console.log при каждом вызове, и это еще более громоздко.

1 голос
/ 25 июля 2010

Вы можете использовать этот код, чтобы проверить, существует ли консольный объект

if('console' in window && 'log' in window.console)
{
    // code using console.log here
}

Или этот код

if(typeof window.console != 'undefined'
&& typeof window.console.log != 'undefined')
{
    // code using console.log here
}

Также вы можете прочитать этот пост http://alexandershapovalov.com/firebug-console-is-not-defined-60/ Внутри поста ссылка как создать jQuery-оболочку для консоли

1 голос
/ 03 февраля 2010

Решение @OcuS, безусловно, лучшее, но вы можете улучшить его с помощью моего: Установите этот способ входа в консоль FF: Вход в консоль ошибок Firefox из JavaScript

Затем добавьте в firebugx.js эти 3 строки внутри IF:

window.console['error'] = li
window.console['warn'] = li
window.console['debug'] = li

Таким образом, вы увидите журнал каждой консоли ошибка , warn и debug даже когда Firebug закрыт

0 голосов
/ 14 января 2010

Мое окончательное решение:

if(!("console" in window)) 
    window.console = {log: function() {}};
0 голосов
/ 14 января 2010

с макушки головы:

if(!console)
{
     console = {};
     console.log = function() { };
}
...