Перехватывать вызовы console.log в Chrome - PullRequest
26 голосов
/ 09 февраля 2012

У меня есть скрипт, который я не могу изменить, который делает много вызовов console.log.Я хочу добавить еще один слой и отвечать, если вызовы содержат определенные строки.Это работает в FF, но выдает ошибку «Незаконный вызов» в Chrome на 4-й строке:

var oldConsole = {};
oldConsole.log = console.log;
console.log = function (arg) {
    oldConsole.log('MY CONSOLE!!');
    oldConsole.log(arg);
}

Есть идеи, как обойти это?Я тоже пытался клонировать консоль ...

Ответы [ 4 ]

37 голосов
/ 09 февраля 2012

Вам нужно позвонить console.log в контексте console для хрома:

(function () {
  var log = console.log;
  console.log = function () {
    log.call(this, 'My Console!!!');
    log.apply(this, Array.prototype.slice.call(arguments));
  };
}());
5 голосов
/ 09 февраля 2012

Вы также можете использовать ту же логику, но вызывать ее из объекта консоли, чтобы контекст был таким же.

if(window.console){
  console.yo = console.log;
  console.log = function(str){
    console.yo('MY CONSOLE!!');
    console.yo(str);
  }
}
3 голосов
/ 07 марта 2017

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

Вы можете переопределить поведение каждой функции консоли (и для всех браузеров ) следующим образом:

// define a new console
var console = (function(oldCons){
    return {
        log: function(text){
            oldCons.log(text);
            // Your code
        },
        info: function (text) {
            oldCons.info(text);
            // Your code
        },
        warn: function (text) {
            oldCons.warn(text);
            // Your code
        },
        error: function (text) {
            oldCons.error(text);
            // Your code
        }
    };
}(window.console));

//Then redefine the old console
window.console = console;
2 голосов
/ 20 июля 2016

С новым оператором распространения ES6 вы можете написать это так:

(function () {
  var log = console.log;
  console.log = function () {
    log.call(this, 'My Console!!!', ...arguments);
  };
}());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...