【发布时间】:2015-05-03 11:52:56
【问题描述】:
我将如何使用 javascript 循环浏览 javascript 控制台中的消息并将它们显示给用户,例如将它们逐行添加到像 div 这样的容器元素中。
我了解如何使用 console.log 将消息添加到控制台,但我的问题是,有什么方法可以检索已添加的消息。
【问题讨论】:
标签: javascript logging console
我将如何使用 javascript 循环浏览 javascript 控制台中的消息并将它们显示给用户,例如将它们逐行添加到像 div 这样的容器元素中。
我了解如何使用 console.log 将消息添加到控制台,但我的问题是,有什么方法可以检索已添加的消息。
【问题讨论】:
标签: javascript logging console
为此,想法是拦截发送到控制台的任何内容。这是一个跨浏览器解决方案。
function takeOverConsole(){
var console = window.console
if (!console) return
function intercept(method){
var original = console[method]
console[method] = function(){
var message = Array.prototype.slice.apply(arguments).join(' ')
// do sneaky stuff
if (original.call){
// Do this for normal browsers
original.call(console, message)
}else{
// Do this for IE
original(message)
}
}
}
var methods = ['log', 'warn', 'error']
for (var i = 0; i < methods.length; i++)
intercept(methods[i])
}
这里我调用这个函数,然后做一个简单的日志“嘿”。它会拦截它,我会提醒拦截的消息。 http://jsfiddle.net/Grimbode/zetcpm1a/
解释这个函数是如何工作的:
我们用实际的控制台声明了一个变量console。如果console 是undefined,我们就立即停止并离开函数。
我们为不同的控制台消息类型声明var methods = ['log', 'warn', 'error']
intercept 函数并发送console type(字符串:'log'、'warn'等)。拦截功能只是将侦听器应用到该类型的控制台消息。在我们的例子中,我们应用了一个监听器来记录、警告和错误。
我们检索消息并将其放入消息变量中。
由于我们截获了消息,所以不会显示在控制台中,所以我们继续使用 original.call() 或 original() 将其添加到控制台中。
【讨论】:
console.log(something) 并将该数据移动到其他可以读取的地方时拦截的想法非常有帮助。我可能会走那条路。