Pull to refresh

Comments 29

UFO just landed and posted this here
UFO just landed and posted this here
Пробовали использовать ключевое слово «debugger»?
UFO just landed and posted this here
Ну, по-моему его можно использовать почти для всего)
Да, будет весьма интересен и рабочий код, и сравнение с альтернативами. Все мы так или иначе делали свои варианты консолей (у меня была просто на чистом JS в плавающем диве, таскаемом за заголовок).
UFO just landed and posted this here
Кто чего поддерживает лучше сделать таблицей.
> Порядок использования аргументов можно изменить вручную, использовав символ $ и приписав

Символ %.
Черд. Невнимательно читал:)
UFO just landed and posted this here
Простите, немного не в тему, а киньте ктонить нормальной реализацией sprintf в Javascript.
UFO just landed and posted this here
Еще думаю стоит заметить что console.log в некоторых броузерах (Chrome, FireFox точно) без ошибки отрабатывают при закрытой консоли, а тот же IE выдает ошибку.

Просто в связи с этим возникали ошибки: забывали убрать console.log, в Chrome/FF работало все нормально, а в IE ошибка.
Видимо это связанно с устройством встроенной консоли. В стабильной ветке Firefox'а все еще есть ошибка, а в бетках 4-ой ее уже нет, но есть встроенная консоль. Видимо в ie дела обстоят как-то иначе, но как ведет себя ie9 я не знаю… Может кто просветит?
+500 насчет «не работает в стабильной версии». Причем я помню, что относительно недавно в 3-их ФФ с закрытой консолью ещё все срабатывало безошибочно, но не сейчас. Не далее как в начале года насткнулся на именно такой «глюк» — именно из-за неубранного console.log в приложении, открытом на клиентском компьютере не срабатывал полностью скрипт.
Именно потому я пользуюсь такой ф-цией:
function log () {
    return 'console' in window ? console.log.apply(console, arguments) : null;
}
А я ставлю затычку из методов:
if (!window.console)
{
    window.console = {
        log : function(){},
        dir : function(){}
        ....
    }
}
Еще вариант, автоматически активировать консоль если текущий домен выглядит как локальный (чегото-там.local), и глушить затычками если он нелокальный. Ведь отладку делаем обычно на локальных серверах.
Кстати, о затычках.

Из готовых решений есть ещё такой кроссбраузерный вариант: Complete cross-browser console.log() с подробным описанием всех решаемых проблем и тестовая страница, где можно сразу увидеть/проверить результат работы во всех браузерах.

При подключении consolelog.js обратите внимание на то, что этот скрипт не переопределяет уже имеющуюся функцию log() (это может были либо ваша, либо из другой подобной затычки).
Вопрос.
Напихали мы в свой большой JavaScript проект десятки или даже сотни отладочных и дебагерских вызовов к консоли. А какой самый удобный способ убрать их из релиза?

Сходу в голову приходит вариант сделать Replace по все JS файлам.
Или сделать собственный объект console, в котором все методы ничего не делают, и тогда console вызовы можно оставить в коде.

Может быть есть какие то более приятные варианты?
Переопределение консоли — вполне неплохой вариант. Тем более, можно определить её так:
new function () {
  var debug    = true;
  var original = window.console;
  window.console = {};
  ['log', 'dir', ...].forEach(function (method) {
    console[method] = function () {
      return (debug && original) ? original[method].apply(original, arguments), 
    }
  });
};


И проблему с неопределенной консолью решите и легко отключается дебаг.
Стоит добавить что в Chrome есть:
  • переменная $0 всегда равна выбраному елементу на вкладке Elements (или document.body, если ничего не выбрано)
  • функция copy() копирует текст в буфер обмена (например copy(document.body.innerText))
  • функция inspect() переключает на вкладку Elements где автоматически выбирается нужный елемент (например inspect(document.body))
Есть еще такой вариант:

(function(__global){
    if (!__global.console || (__global.console && !__global.console.log)) {
         __global.console = {
	     log: (__global.opera && __global.opera.postError)
             ? __global.opera.postError
	     : function(){ }
        }
    }
})(this);


Удобно включать режим отладки из адресной строки, например дописывая в неё #console

if(typeof allow_console == 'undefined'){
   var allow_console= false;

   var hash = location.hash;
   if(hash.indexOf('#console')!=-1){
     allow_console = true;
   }
}
if(allow_console==true){
  console.log('Режим отладки включен');
}

Sign up to leave a comment.

Articles

Change theme settings