2013-12-19 69 views
1

我用一小段代碼創建了一個小小的Firefox擴展。事情是這樣的:Firefox擴展dev:如何設置觀察者一次

var load = function() { 
    Components.classes['@mozilla.org/observer-service;1'].getService(Components.interfaces.nsIObserverService).addObserver({ 
      observe: function(subject, topic, data) { 
        var channel = subject.QueryInterface(Components.interfaces.nsIHttpChannel); 
        if(/google\.com/.test(channel.originalURI.host)) { 
          // magic here 
        } 
      } 
    }, 'http-on-modify-request', false); 
}; 

window.addEventListener('load', load, false); 

當我提出這個插件的Firefox插件,我得到以下的回報:

你創建一個HTTP觀察員每一個打開的窗口,同時有 應只是一個實例。

現在我該如何創建一個觀察者實例?

回答

1

您應該使用JS代碼模塊。在您的覆蓋腳本放:

Cu.import("resource://yourPluginName/yourModule.jsm"); 

,並在您yourModule.jsm,只有那裏把你的觀察,例如:

const {classes: Cc, interfaces: Ci, utils: Cu} = Components; 
var observerService = Cc["@mozilla.org/observer-service;1"] 
    .getService(Ci.nsIObserverService); 
observerService.addObserver(testObs, "http-on-examine-response", false); 

var testObs = { 
    observe: function(aSubject, aTopic, aData){ 
     //... 
    } 
} 

而且BTW在JSM,你不能使用window對象。

+0

您激勵我使用以前的代碼解決方法來以正確的方式實現觀察者。我已經在我的代碼中測試了這一點,它的工作原理。 –

+1

很好的答案!不要忘記將'var EXPORTED_SYMBOLS = [];'放入你的模塊,否則會拋出錯誤。 – Aley