2012-08-24 41 views
0

我在注册firefox插件中的nsIConsoleListener时遇到了一些麻烦。这里是我的代码:在Firefox插件中注册控制台服务侦听器

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出现的问题,但似乎没有,所以我不知道为什么这不起作用。

回答

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'); 
相关问题