Глобальный консольный объект в Safari / Chrome сбрасывается - PullRequest
4 голосов
/ 11 февраля 2009

Я работаю над плагином jQuery и пытаюсь создать единый кросс-браузерный консольный объект для отладки. Плагин будет использовать Firebug или FirebugLite, но также позволяет пользователю выбирать родной консольный объект браузера, если он доступен. Для Safari / Chrome консольные методы принимают только 1 аргумент, в то время как консольный API Firebug (что я и пытаюсь повторить) принимает любое количество аргументов, которые выводятся в виде объединенной строки. Я использую следующий код для переопределения собственного метода журнала консоли:

window.console._log = window.console.log;
window.console.log = function(){
    window.console._log($.makeArray(arguments).join(", "));
};

У меня есть тестовая страница, которая будет запускать команды console.log ("str1", "str2") при нажатии. Первые несколько раз сообщения журнала работают должным образом, но затем, через некоторое время (обычно всего несколько секунд), сообщения журнала начинают печатать только первый аргумент. Это похоже на то, как если бы консольный объект был восстановлен в своем первоначальном исходном состоянии, а мой переопределенный метод log () был уничтожен. У кого-нибудь есть больше информации по этому поводу или может быть обходной путь?

1 Ответ

1 голос
/ 15 февраля 2009

Возможно, вам повезет больше, если заменить весь объект консоли? Это сработало для меня:

window._console = window.console;
window.console = {
    log: function() {
        window._console.log($.makeArray(arguments).join(", "));
    }
};

FWIW, в источнике IDL WebCore свойство console DOMWindow имеет значение , помеченное как Replaceable , тогда как свойства объекта консоли не являются .

...