浏览器提供的 Javascript 对象上的 Mozilla Developer Network页面console
显示:“ Note: At least in Firefox, if a page defines a console object, that object overrides the one built into Firefox.
”。有没有办法覆盖这个对象,但仍然与浏览器的Web 控制台交互?
一个用例是拦截console.log()
调用并做一些额外的事情或采用不同的参数,例如日志分类,同时保留通过 Firebug 或 Google Chrome Inspect Element 等工具登录到控制台时提供的行号/文件信息。我能找到的最接近的匹配答案是:Intercepting web browser console messages,但它不会通过自定义控制台对象与 Web 控制台进行交互,并使用自定义定义的调试服务,例如
debug.log = function(string, logLevel) {
checkLogLevel(logLevel); // return false if environment log setting is below logLevel
var changedString = manipulate(string);
console.log(changedString);
}
不保留函数调用的行号/文件源debug.log()
。一种选择是对console.trace()
跟踪堆栈进行一些操作并向上爬上一层,但我对首先扩展感到好奇console.log()
。我还想找到一个与现有 Web 控制台/工具(如 Firebug)一起使用的解决方案,而不是创建自定义浏览器扩展或 Firebug 插件,但如果有人知道现有的解决方案,我会对它们感兴趣。
显然是这样的:
console = {
log: function (string) {
console.log('hey!');
}
}
console.log('hey!');
将不起作用并导致无限递归。