在Firefox插件中注册控制台服务侦听器

时间:2012-08-24 20:35:45

标签: javascript firefox firefox-addon

我在firefox插件中注册nsIConsoleListener时遇到了一些问题。这是我的代码:

var conSer  = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);

var consoleLis = {
    observe:function( aMessage ){

        conSer.unregisterListener(consoleLis); 

        Components.utils.reportError("observed "+aMessage.message);

    },
    QueryInterface: function (iid) {

        if (!iid.equals(Components.interfaces.nsIConsoleListener) && !iid.equals(Components.interfaces.nsISupports)) {

                Components.utils.reportError("NS_ERROR_NO_INTERFACE");

                throw Components.results.NS_ERROR_NO_INTERFACE;

        }

        return this;

    }
};


conSer.registerListener(consoleLis); 

conSer.logStringMessage('this is a test');

似乎无论我在上面尝试的代码有什么变化,QueryInterface似乎总是抛出一个错误。我查看了bugzilla,看看nsIConsoleListener是否有任何突出的错误,但似乎没有,所以我不知道为什么这不起作用。

1 个答案:

答案 0 :(得分:2)

没关系,我在Mozilla irc的帮助下找到了它:

let Cc = Components.classes;
let Ci = Components.interfaces;
let Cu = Components.utils;

Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/XPCOMUtils.jsm");

var consoleLis = {
    observe:function( aMessage ){

        dump("observed "+aMessage.message);

        Services.console.unregisterListener(consoleLis); 

    },
    QueryInterface:XPCOMUtils.generateQI([Ci.nsIConsoleListener])
};


Services.console.registerListener(consoleLis); 

Services.console.logStringMessage('this is a test');