Это мой взгляд на разные ответы. Я действительно хотел видеть зарегистрированные сообщения, даже если у меня не было открытой консоли IE, когда они были запущены, поэтому я помещаю их в массив console.messages
, который я создаю. Я также добавил функцию console.dump()
для облегчения просмотра всего журнала. console.clear()
очистит очередь сообщений.
Это решение также "обрабатывает" другие методы консоли (которые, я считаю, все происходят из API консоли Firebug )
Наконец, это решение имеет форму IIFE , поэтому оно не загрязняет глобальный охват. Аргумент резервной функции определяется в нижней части кода.
Я просто помещаю его в свой основной файл JS, который есть на каждой странице, и забываю об этом.
(function (fallback) {
fallback = fallback || function () { };
// function to trap most of the console functions from the FireBug Console API.
var trap = function () {
// create an Array from the arguments Object
var args = Array.prototype.slice.call(arguments);
// console.raw captures the raw args, without converting toString
console.raw.push(args);
var message = args.join(' ');
console.messages.push(message);
fallback(message);
};
// redefine console
if (typeof console === 'undefined') {
console = {
messages: [],
raw: [],
dump: function() { return console.messages.join('\n'); },
log: trap,
debug: trap,
info: trap,
warn: trap,
error: trap,
assert: trap,
clear: function() {
console.messages.length = 0;
console.raw.length = 0 ;
},
dir: trap,
dirxml: trap,
trace: trap,
group: trap,
groupCollapsed: trap,
groupEnd: trap,
time: trap,
timeEnd: trap,
timeStamp: trap,
profile: trap,
profileEnd: trap,
count: trap,
exception: trap,
table: trap
};
}
})(null); // to define a fallback function, replace null with the name of the function (ex: alert)
Дополнительная информация
Линия var args = Array.prototype.slice.call(arguments);
создает массив из arguments
объекта. Это необходимо, потому что arguments не является на самом деле массивом .
trap()
- обработчик по умолчанию для любой из функций API. Я передаю аргументы message
, чтобы вы получили журнал аргументов, которые были переданы любому вызову API (не только console.log
).
Редактировать
Я добавил дополнительный массив console.raw
, который захватывает аргументы в точности так, как передано trap()
. Я понял, что args.join(' ')
преобразовывает объекты в строку "[object Object]"
, что иногда может быть нежелательно. Спасибо bfontaine за предложение .