0

我在我的 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 是否存在任何未解决的错误,但似乎没有,所以我不知道为什么这不起作用。

4

1 回答 1

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');
于 2012-08-25T01:16:09.490 回答