2012-08-24 43 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'); 
相關問題