2011-02-09 2 views
41

Мне было интересно, как я могу узнать с javascript если объект консоли доступен?выяснить, доступна ли консоль

У меня проблема, что если я забуду удалить отладочный вывод, например console.log('sthg'), я получаю ошибки в нескольких браузерах, если нет firebug или подобных, активных.

спасибо за помощь

рядом с этой проблемой я заинтересован во всех информациях об объекте консоли. есть кто-нибудь ссылку на документацию или так? это стандарт? и так далее ...

ответ

60

Проверьте свойство существует в качестве члена window:

if (window.console) { 
} 

рядом с этой проблемой я заинтересован во всех информациях об объекте консоли. есть кто-нибудь ссылку на документацию или так? это стандарт? и так далее ...

Проверьте Firebug documentation for the Console API; Chrome и Safari реализуют большинство, но не всех, методов, перечисленных там. Нет стандартного определения того, что должно быть на консоли, поэтому вам нужно протестировать каждый браузер, чтобы узнать, поддерживает ли он эту функцию.

+0

Что относительно хромов и консоли IE? :-) – helle

+0

@helle: Как я уже сказал, Chrome реализует большинство API-интерфейсов Firebug Console. IE реализует некоторые из основных, таких как 'warn',' error', 'info' и т. Д., Но он не реализует их всех и, похоже, не является документированным списком, поэтому вам придется попробовать их для сам. –

+0

@AndyE не могли бы вы объяснить, почему проверка того, что свойство существует в окне, не столь надежна, как использование typeof? Почему мы не должны напрямую проверять переменную windows.console или даже просто глобальную консоль, как в других ответах? – matpop

-4

может быть ...

if (console) { 
    // do stuff 
} 
+6

Это вызовет ошибку в браузерах, где 'console' не определен. –

+0

yep ... попробовали это :-) – helle

5

Определено firebug, IE8 (необходимо открыть инструменты разработчика с F12), Chrome и т.д., но нет никакой определенной спецификации для него. Существует console.log wrapper, что делает его очень простым в использовании, кросс-браузером, поэтому, если консоль не существует, ваш код не взрывается.

+0

Вот что я искал, чтобы рекомендовать, но не мог вспомнить имя! Хорошо знать, что кто-то еще его нашел. –

+0

Что относительно хромов и консоли IE? :-) – helle

+0

@helle Да, я думаю, IE8 добавила консоль сейчас и не думала о Chrome. Благодарю. –

30

Хороший простой и короткий способ вывода на консоль надежно выглядит следующим образом:

window.console && console.log('Debug message'); 
+0

+1 для простоты: D – Tieme

+0

Я не думаю, что это очень хорошо, потому что у кого-то может быть перезаписанная консоль и .log не существует. Вы также должны проверить, существует ли .log и действительно является функцией. – mambo

2

Я всегда включаю это в верхней части моего HTML-заголовка, прежде чем я загрузить что-нибудь еще. Отладка с console.debug слишком длинная для меня. И мне нравится переключать использование этих функций консоли.

Не знаю, как оптимизирован код, но он всегда выполняет эту работу.

(function() { 
    var consoleDisabled = false; 
    if (consoleDisabled) { 
     window.console = undefined; 
    } 
    if (window.console == undefined) { 
     window.console = { 
      debug: function() { 
       return true; 
      }, 
      info: function() { 
       return false; 
      }, 
      warn: function() { 
       return false; 
      }, 
      log: function() { 
       return false; 
      } 
     } 
    } 
    debug = (function(args) { 
     window.console.debug(args); 
    }); 
    info = (function(args) { 
     window.console.info(args); 
    }); 
    warn = (function(args) { 
     window.console.warn(args); 
    }); 
    log = (function(args) { 
     window.console.log(args); 
    }); 
})(); 
debug(somevar); 
info(somevar); 
warn(somevar); 
log(somevar); 
4
try{ 
console.log("test") 
} 
catch(e){ 
console={}, 
console.log=function(a){} 
} 

просто положить его в верхней части файла JS, а затем использовать console.log(); без беспокойства за ошибку браузера, у меня также была эта ошибка в IE9

+0

Интересное решение. Обычно мне не нравится использовать исключения для обработки потока, но это может быть очень удобно. – Hal

7

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

var console = console || { 
    "log": function(stuff) {} 
}; 

мне это нравится, потому что называя это не делает вызывают ошибку, но он возвращает [undefined], который я считаю уместным.

Обратите внимание, что многие многие люди до (и после) мы написали аналогичные polyfills:

https://gist.github.com/search?q=console+%7C%7C+console

+0

+1 потому что я думаю, что это хорошая идея. Ответ Энди Е делает именно то, что было задано, поэтому у него есть правильный ответ. – helle

+0

согласился. это больше, чем прямой ответ. Я рад, что вам это нравится –

+0

Возможно, стоит сказать, что он работает, потому что директива _var_ фактически обрабатывается ** перед ** выполнением кода. – matpop

2

Простейшее путь будет:

if (window.console){ 
    console.log('do something'); 
} 

вместо того, чтобы просто писать:

console.log('do something'); 
Смежные вопросы