0

我正在开发一个使用许多不同框架和自定义脚本(jQuery、Backbone、Bootstrap、Less 仅举几例)的 Web 应用程序,其中任何一个都可能随时打印控制台输出。一些输出来自我刚才提到的框架,其他输出console.log来自以前从事产品工作的工程师在代码中留下的剩余调用。

这是一个问题,因为所有数十行额外输出都与有效输出混合在一起,并且很难解析所有这些行以检查我的有效输出是否正常工作。我想要一个临时解决方案来覆盖console.logChrome 中的函数,以便我可以过滤掉某些消息并专注于我关心的输出。

如何console.log用我自己的函数覆盖 Chrome 中的函数?

console.log我已经尝试创建一个 Chrome 扩展并且它有点工作 -就扩展而言,我能够覆盖,但console.log原始源中的所有引用都没有改变。

编辑:为清楚起见,我不是在寻找要添加到站点的另一个脚本。我正在寻找一种完全在 Web 浏览器中实现的解决方案,或者不涉及更改在 Web 应用程序中下载的源代码的其他技术。

4

3 回答 3

0

Firefox 有一种方法可以将特定扩展的控制台日志记录级别about:config.

Chrome 没有此功能。您的选择:

  1. 通过右键单击控制台消息行的白色(空白)部分并选择Filter > Hide Messages from foo.js从特定源文件中过滤掉所有消息。
  2. 覆盖一个或多个控制台方法(正如您已经完成的那样)。这种方法只影响当前的脚本上下文。Chrome 扩展程序在它们自己的独立世界中运行,具有自己的窗口对象、全局范围和控制台对象。您需要在每个扩展程序的执行上下文中粘贴并运行更改控制台的脚本,并且您的修改仅在页面卸载之前生效。您可以使用控制台底部的下拉菜单更改控制台的有效执行上下文<page context>。请注意,页面中的任何框架或 iframe 也有自己的执行上下文,可使用框架下拉菜单(最初设置为<top frame>)访问。
于 2013-09-11T16:03:58.083 回答
0

不完全覆盖console.log,但如果您右键单击控制台输出中的任何行,您可以选择 Filter > Hide messages from .js。它还可以让您过滤掉 404 等错误消息,即使您可以覆盖,您也可能无法做到这一点console.log

于 2013-06-27T05:47:15.697 回答
-2

logconsole对象的函数,你可以像这样覆盖它:

var logFn = console.log;  // save the original log function for later use
console.log = function(msg) {
    ...
    logFn.call(console, msg); // call original function if you want to
};

或者,使用闭包保存旧的日志功能:

console.log = (function(logFn) {
    return function(msg) {
        ...
        logFn.call(console, msg); // call original function if you want to
    };
})(console.log);

您需要尽早执行此操作,因为您希望其他框架/库使用自定义的日志功能。

于 2013-06-27T05:59:53.703 回答