我在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是否有任何突出的错误,但似乎没有,所以我不知道为什么这不起作用。
答案 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');