Я ценю, что довольно поздно опаздываю на вечеринку, но у меня есть решение для IE9, которое немного отличается.
(function() {
var temp_log = [];
function log() {
if (console && console.log) {
for (var i = 0; i < temp_log.length; i++) {
console.log.call(window, temp_log[i]);
}
console.log.call(window, arguments);
} else {
temp_log.push(arguments);
}
}
})();
В основном вместо console.log
вы используете log
.Если существует console.log
, то он работает как обычно, в противном случае он сохраняет записи журнала в массиве и выводит их на следующий log
, где доступен console
.
Было бы хорошо, если бы он выдвинулданные, как только console
станет доступным, но это дешевле, чем установка пользовательского прослушивателя setInterval.
Обновленная функция (1 октября 2012 г.)
Я обновил этот сценарий длямое собственное использование и думал, что поделюсь этим.Он имеет несколько достойных улучшений:
- использовать
console.log()
как обычно, т.е. больше не нужно использовать нестандартные log()
- поддерживает несколько аргументов, например
console.log('foo', 'bar')
- Вы также можете использовать
console.error
, console.warn
и console.info
(хотя выводит их как console.log
) * Сценарий 1030 * - проверяет наличие нативных
console
каждые 1000 мс и выводит буфер при обнаружении
Думаю, с этими улучшениями это стало довольно солидным дополнением для IE9. Проверьте репозиторий GitHub здесь .
if (!window.console) (function() {
var __console, Console;
Console = function() {
var check = setInterval(function() {
var f;
if (window.console && console.log && !console.__buffer) {
clearInterval(check);
f = (Function.prototype.bind) ? Function.prototype.bind.call(console.log, console) : console.log;
for (var i = 0; i < __console.__buffer.length; i++) f.apply(console, __console.__buffer[i]);
}
}, 1000);
function log() {
this.__buffer.push(arguments);
}
this.log = log;
this.error = log;
this.warn = log;
this.info = log;
this.__buffer = [];
};
__console = window.console = new Console();
})();