Почему Firefox 3 ломается с console.log - PullRequest
11 голосов
/ 11 февраля 2011

У меня есть следующее:

console.log (a.time_ago() + ' ' + b.time_ago());

Это разрыв в FireFox 3, означающий, что когда FF попадает в эту строку в JS, он не идет дальше.Странно, если у меня открыт Firebug, он не ломается и продолжает работать как обычно.Как-то, как firebug предотвращает эту проблему?

Я озадачен этим.Любые мысли о том, почему console.log может сломать Firefox 3, но не если Firebug открыт?

Спасибо

Ответы [ 6 ]

30 голосов
/ 11 февраля 2011

Это не просто Firefox. Ваш код перестанет работать во всех браузерах (кроме Chrome и Safari (в некоторых случаях), потому что в них встроен console.log () вместе с инструментами разработчика.)

Это потому, что когда у вас нет открытого firebug, объект "console" не определен. Вы должны быть осторожны, никогда не оставляйте функции console.log () в своем коде, иначе это будет работать в каждом браузере .


Я хотел бы добавить, что я иногда использовал эту функцию:

function log () {
    if (typeof console == 'undefined') {
        return;
    }
    console.log.apply(console, arguments);
}

Тогда вы можете просто позвонить:

log(somevar, anothervar);

и он будет работать так же, как console.log, но не потерпит неудачу, если firebug не загружен (и короче, чтобы набрать: P)

Приветствия

4 голосов
/ 11 февраля 2011

В случае, если firebug закрыт, я перезаписываю консольный объект.Таким образом, вы можете реализовать резервные функции ...

console = console || { log : function() {
// place your logging code here, if firebug is closed
}, debug : function() {
// place your debug code here, if firebug is closed
} /*, [ and so on .. ] */ };

Привет,

Dyvor

2 голосов
/ 11 февраля 2011

В FireFox, если консоль не открыта, когда вы вызываете ее, выдается ошибка JavaScript.

Я обертываю все свои console.log в оболочку для проверки консоли - вы можете обернуть проверку вокруг вызова консоли или использовать другое имя для псевдонима console.

Aliasing

/* konsole is a safe wrapper for the Firebug console. */
var konsole = {
  log: function(args){},
  dir: function(args){},
  debug: function(args){},
  info: function(args){},
  warn: function(args){},
  error: function(args){}
};
// Remove below here when in production
if (typeof window.console != 'undefined' && typeof window.console.log == 'function') {
  konsole = window.console;
}
konsole.log('testing debugging');
konsole.error('throw an error message to the console');

Проверка консоли

if (typeof window.console != 'undefined' && typeof window.console.log == 'function') {
  console.log('testing debugging');
  console.error('throw an error message to the console');
}
1 голос
/ 11 февраля 2011

Firefox не имеет консольного объекта. Firebug добавляет один.

Простое исправление - открыть firebug для разработки и удалить операторы console.log для развертывания.

Вы также можете сделать пользовательскую функцию журнала, такую ​​как

function log (msg)
{
  if(console)
  {
    console.log(msg);
  }
}

, который будет регистрироваться, только если консоль существует

1 голос
/ 11 февраля 2011

Я всегда проверяю if (console), чтобы убедиться, что консоль действительно существует Если firebug не открыт, значит вы действуете на нулевой объект, и поэтому он ломается

0 голосов
/ 07 июля 2014

Чтобы Firefox 3.0 не жаловался надежно , используйте следующее ...

if ('console' in window) {}
...