你能以编程方式访问Firebug控制台输出吗?

15

是否可以以编程方式访问Firebug之前记录的输出?

例如:

console.log('a');
console.log('b');
console.log('c');

for (var i = 0; i < console.output.length; ++i) {
    alert(console.output[i]);  // "a", "b", "c"
}
3个回答

5

在不自己包装window.console的情况下,我认为这是不可能的。从源代码来看,当Firebug的console方法(在主文档中运行,因此没有特殊权限)被调用时,它会在主文档中留下一些对象,然后引发一个自定义事件。在特权插件地带运行的Firebug监听器捕获该事件,吞噬掉文档中留下的对象,并向控制台面板添加适当的内容,该面板是浏览器chrome的一部分,因此JavaScript无法访问主窗口中运行的部分。

我可能对此的细节有所错误,因为我只是粗略地查看了Firebug源代码并且几乎没有进行Firefox插件开发,但我认为这是大体正确的。


5

Paul Irish创建了一个包装console.log的工具,可以解决你的问题,点击这里查看。


2

请参考这个帖子。(不是完全相同的问题,但是相关)。

我没有找到读取控制台输出的方法,但如果你只对捕获::log()消息感兴趣,你可以重写.log()方法,或创建自己的方法来将日志消息写入另一个容器,然后调用.log()。

var myLogStr='';

function myLog(str)
{
  if(console) console.log(str);
  myLogString+=str+'\n';
}

当然,所有的Firebug对象(控制台等)都存在于DOM中,因此您可以追踪控制台窗口的ID并直接检索内容。

更新

Firebug还提供了一些事件,您可以钩入这些事件,这可能提供了拦截错误等的方法。


哈哈...我没注意到。我在那个帖子上给你点了赞。不过我认为值得要么在Firebug列表中开一个问题,要么在运行FireBug时探索DOM以找到控制台对象的内部。这样可以很好地捕获错误输出等信息。 - 3Dave
链接不幸已经失效。 - Sebas
@Sebas 这是我意识到应该将相关内容粘贴到答案中之前的内容。我会看看能否找到缓存版本。 - 3Dave

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