Прокси все консольные выходы [журналы, ошибки, предупреждения и т. Д.) В HTML - PullRequest
1 голос
/ 15 января 2020

Я ищу решение для печати эквивалента того, что я вижу в консоли, в элемент div в HTML. Я превращаюсь с веб-технологиями в телевизор, поэтому инструменты браузера не предоставляются. Я нашел это решение:

(function () {
    if (!console) {
        console = {};
    }
    var old = console.log;
    var logger = document.getElementById('log');
    console.log = function (message) {
        if (typeof message == 'object') {
            logger.innerHTML += 'LOG: ' + (JSON && JSON.stringify ? JSON.stringify(message) : String(message)) + '<br />';
        } else {
            logger.innerHTML += 'LOG: ' + message + '<br />';
        }
    }
    console.error = function (message) {
        if (typeof message == 'object') {
            logger.innerHTML += 'ERROR: ' + (JSON && JSON.stringify ? JSON.stringify(message) : String(message)) + '<br />';
        } else {
            logger.innerHTML += 'ERROR: ' + message + '<br />';
        }
    }
    console.warn = function (message) {
        if (typeof message == 'object') {
            logger.innerHTML += 'WARN: ' + (JSON && JSON.stringify ? JSON.stringify(message) : String(message)) + '<br />';
        } else {
            logger.innerHTML += 'WARN: ' + message + '<br />';
        }
    }
})();

, но мне нужно более надежное решение, которое распечатывает все содержимое консоли, а не только то, что проходит через эти три функции. Это возможно через ES5 JavaScript?

1 Ответ

0 голосов
/ 23 марта 2020

Вы можете использовать loda sh function _.functions и обернуть все console.methods

_.functions(console).forEach(function (methodName) {
var oldMethodName = console[methodName];
console[methodName] = function (message) {
    if (typeof message == 'object') {
        logger.innerHTML += methodName + ' : ' + (JSON && JSON.stringify ? JSON.stringify(message) : String(message)) + '<br />';
    } else {
        logger.innerHTML += methodName + ' : ' + message + '<br />';
    }
    return oldMethodName.call(console, arguments)
}
})

Я бы также предложил добавить onError listener в окно и переопределить setTimeout, чтобы получить ошибки из него.

...