Przechwytywanie połączeń do konsoli.Zaloguj się Chrome

Mam skrypt, którego nie mogę zmienić, który sprawia, że dużo konsoli.rejestr połączeń. Chcę dodać kolejną warstwę i odpowiedzieć, jeśli wywołania zawierają pewne ciągi. To działa w FF, ale wyrzuca błąd "nielegalne wywołanie" w Chrome na 4. linii:

var oldConsole = {};
oldConsole.log = console.log;
console.log = function (arg) {
    oldConsole.log('MY CONSOLE!!');
    oldConsole.log(arg);
}
Jakieś pomysły, jak to obejść? Próbowałem też sklonować konsolę...
Author: sprugman, 2012-02-09

4 answers

Musisz wywołać console.log w kontekście console dla chrome:

(function () {
  var log = console.log;
  console.log = function () {
    log.call(this, 'My Console!!!');
    log.apply(this, Array.prototype.slice.call(arguments));
  };
}());
 32
Author: zzzzBov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-09 18:28:09

Możesz również użyć tej samej logiki, ale odwołaj ją od obiektu console, aby kontekst był taki sam.

if(window.console){
  console.yo = console.log;
  console.log = function(str){
    console.yo('MY CONSOLE!!');
    console.yo(str);
  }
}
 5
Author: rgthree,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-09 18:34:54

Wiem, że to stary post, ale i tak może się przydać, ponieważ inne rozwiązania nie są kompatybilne ze starszymi przeglądarkami.

Możesz przedefiniować zachowanie każdej funkcji konsoli (i dla wszystkich przeglądarek ) w następujący sposób:

// 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;
 3
Author: Ludovic Feltz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-07 14:59:50

Z nowym operatorem spreadu ES6 możesz napisać to tak

(function () {
  var log = console.log;
  console.log = function () {
    log.call(this, 'My Console!!!', ...arguments);
  };
}());
 1
Author: Devnegikec,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-20 09:05:57