Как правильно написать в консоли сценария (console.log) в IE? - PullRequest
17 голосов
/ 01 декабря 2010

У меня есть этот заменитель console.log, определенный в document.ready():

$(document).ready(function(){
  console.log("doc ready");
  if(typeof console === "undefined"){
    console = { log: function() { } };
  }
}

Я думал, что IE должен был иметь эту функцию доступной, но когда я включаю вызов выше

  console.log("doc ready");

вывод появляется в консоли Firefox, но не в IE - фактически выполнение сценария IE в этот момент полностью прерывается.

Какой правильный способ записи на консоль в IE?

Ответы [ 4 ]

13 голосов
/ 01 декабря 2010

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

$(document).ready(function(){

  if(typeof console === "undefined"){
    console = { log: function() { } };
  }
  console.log("doc ready");
}

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

6 голосов
/ 01 декабря 2010

IE6 / 7 по умолчанию не имеет консоли.

На самом деле, Firefox также не имеет - он предоставляется плагином под названием Firebug;Если вы используете копию Firefox без установленного Firebug, вы получите ошибки при попытке вызвать console точно так же, как и в IE.

IE8 / 9 do имеет консоль.

Chrome и Safari имеют встроенный консольный объект, но не рассчитывайте, что он работает точно так же, как Firebug или IE8.

Обратите внимание, что во всех браузерах консольобъект не может быть создан, пока не открыто окно отладки.Это означает, что ваш код с вызовом console.log может не работать в любом браузере , а не только в IE.

В вашем примере вы по сути создаете фиктивный объект console, если он не 't существует, что явно предназначено для предотвращения сбоя браузеров без консоли при вызове console.log().Но вы вызываете console.log() до того, как этот код будет запущен, поэтому браузеры без консоли будут аварийно завершать свою работу.Поэтому вам следует переместить строку console.log("doc ready"); вниз, чтобы она шла после бита, который определяет, существует ли console.

Если вы хотите, чтобы консоль существовала для IE, существует версия Firebug с именем Firebug Lite , который можно запустить в любом браузере.Если вы запустите это, он создаст объект console.

Однако обратите внимание, что его можно запустить только после загрузки страницы, поэтому вы никогда не сможете заставить его отображать сообщения консоли вфункция готовности документа.Кроме того, он может не создать консольный объект, если он уже существует, поэтому код, который вы имеете в документе, готовом создать фиктивный консольный объект, может помешать корректной работе Firebug Lite.

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

2 голосов
/ 01 декабря 2010

Вот что я использую для аварийного переключения на firebug lite, если нет доступной консоли.Это гарантирует, что вы получите консоль некоторого описания, хотя все они работают немного по-другому, так что будьте осторожны.

function attachConsole(force) {
  if(force || typeof console === "undefined"){
    var head= document.getElementsByTagName('head')[0];
    var script= document.createElement('script');
    script.type= 'text/javascript';
    script.src= 'http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js';
    head.appendChild(script);
    return true;
  }
return false;
}
0 голосов
/ 01 декабря 2010

консоль для firebug.

Вам нужно будет установить firebug lite , чтобы включить запись в консоль в IE.

...