来自Firefox插件的控制台日志记录

3
Mozilla文档(https://addons.mozilla.org/en-US/developers/docs/sdk/latest/dev-guide/console.html)指出我应该使用console.log从扩展程序生成消息。这些消息应该出现在Firefox错误控制台中。但对我来说并非如此。今天我第一次使用Addon builder,我想创建一个在某些事件上切换选项卡的扩展程序。选项卡确实被切换了,并且切换到了我期望的选项卡,因此我的代码肯定运行了。但是console.log输出不可见。
我已将过滤器设置为“全部”。我只看到来自Addon builder本身的CSS警告。
我还安装了Firebug。它也没有显示任何东西。(当从网页上下文使用console.log时,这很好用。)使用Firebug的问题在于它仅针对一个/一些选项卡启用,因此在切换选项卡时无用。我需要一个始终存在的日志窗口。
那么console.log的输出会在哪里呢?

你是否正在使用Firefox的控制台->Web开发者->错误控制台(Ctrl+Shift+J)? - Tomasz Dzięcielewski
是的,就是那个带有相同热键的。直接来自Firefox的那个,一直都在那里。 - ygoe
4个回答

9
请在你的插件main()中加入一个测试console.log("something");如果错误控制台(“消息”选项卡)中没有任何内容显示,那么可能Firefox未配置为显示console.log(最近发生了这种情况,使用jetpack sdk 1.14)。详情请参见:SDK 1.14中console.log行为的更改
快速而简单的摘要:在about:config中将extensions.sdk.console.logLevel设置为"all"
尽管从你的问题中:

我已将过滤器设置为“全部”。

...听起来你已经知道这个。因此,不太清楚你的意思是什么。

1
我只是使用错误日志窗口中可用的按钮设置了过滤器,而不是使用隐藏设置。但从您引用的文章中可以看出,新的默认设置将是“error”,它仅打印对console.error()的调用。我将我的调用更改为这个级别,现在它们会显示在日志窗口中(作为错误消息)。但这样做的好处是我可以过滤掉来自附加组件构建器本身的所有警告,因此将错误级别用于我的调试消息实际上非常有用。 - ygoe
看起来似乎相关的是,升级到 Add-on SDK 1.14 的插件似乎已经“破坏”了(或停用了)alert() - Lori
我甚至都不敢尝试从Chrome上下文中使用alert。;-) - ygoe
非常重要的最后一步是重新启动Firefox。 - beeftosino

5

不要再使用 var aConsoleService = Cc...,直接插入以下内容即可使用所有功能:

Cu.import('resource://gre/modules/devtools/Console.jsm');

现在可以做任何事情,console.log('blah')console.time('rawr')console.endTime('rawr')等等。


1
Cu.import 真正有效吗?我有的例子是 Components.utils.import - dbreaux
2
通常开发人员会使用这个快捷方式:通过 const {interfaces: Ci, utils: Cu, classes: Cc} = Components;Cu 定义为 Components.utils,在 addon-sdk 中则使用 var {Cu, Ci, Cc} = require('chrome'); - Noitidart

2

仅供完整性说明:在一个非SDK的插件中,我必须在bootstrap.js中添加这两行代码以实现伪造console.log():

var aConsoleService = Cc["@mozilla.org/consoleservice;1"].getService(Ci.nsIConsoleService);
var console = {log:function(str){aConsoleService.logStringMessage(str);}}

也许对其他人有用,我猜..

这里引用 - "在Webkit浏览器中,控制台是内置的,并且控制台属性始终可用。Firefox控制台取决于安装并打开Firebug(或其他插件)。IE7没有控制台,IE8有一个控制台,但仅当启动IE开发人员工具时才存在控制台属性。" - user3526

2

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