监听 console.log

15

我想为 console.log() 设置一个监听器,并在不阻止默认行为的情况下处理消息。因此,开发工具的控制台应该也能收到该消息。有什么想法吗?

2个回答

17

我从未在网页中尝试过这个方法,但它可以在浏览器插件中使用(由于安全原因,JavaScript权限不同)。

你肯定可以采用类似以下代码:

(function(){

    var originallog = console.log;

    console.log = function(txt) {
        // Do really interesting stuff
        alert("I'm doing interesting stuff here !");

        originallog.apply(console, arguments);
    }

})();

在 JavaScript 中有趣的事情是,函数也是对象 :D


1
似乎 console.log 无法在 console 对象之外工作 - 或许它依赖于 this 变量。此外,我不认为将函数作为对象有趣:这正是使得这种语言卓越的事情。 - Gabi Purcaru
你说得对!我编辑了我的回答。我们会一起得出一个很棒的答案的 ;) - deadalnix
原始文件名和行号在使用这种方法时不会被保留在开发工具中。 - Nishchit

4
这是一个小技巧,但我不确定是否有更好的解决方案:
console._log_old = console.log
console.log = function(msg) {
    alert(msg);
    console._log_old(msg);
}

该解决方案的问题是对全局范围产生了副作用。更好的解决方案是将console._log_old存储在闭包中的局部变量中,而不是全局范围中。 - deadalnix
会的,使用apply()函数即可;请查看我的编辑答案。无论如何,感谢您指出这一点,在之前的版本中是正确的,但我一开始没有注意到。 - deadalnix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接