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は常にエラーをスローするようです。nsIConsoleListenerに未解決のバグがあるかどうかを確認するために、bugzillaを調べましたが、そうではないようです。そのため、これが機能しない理由がわかりません。

4

1 に答える 1

2

気にしないでください、私はMozillaircの人々の助けを借りてそれを理解しました:

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 に答える