1

コードを使用しようとしています

// This is an active module of the goelvivek (8) Add-on
exports.main = function() {
  var httpRequestObserver =  
  {  
    observe: function(subject, topic, data)   
    { 
      if (topic == "http-on-examine-response") {  
        if(console)
          console.log(data);
      }  
    }  
  }; 
  var {Cc, Ci, Cr} = require("chrome");
  var observer = require("observer-service");   
  observerService = Components.classes["@mozilla.org/observer-service;1"].  
    getService(Components.interfaces.nsIObserverService);  
    observerService.addObserver(httpRequestObserver, "http-on-examine-response", false);
};

しかし、行console.log(data);はコンソールログに何も出力していません。なぜ ?

4

2 に答える 2

4

QueryInterface()Nickolay が指摘した問題に加えて、オブザーバーは(通常はXPCOMUtils.generateQI()を使用して) 関数を実装する必要があります。アドオン SDK を使用してそれを行う方法は次のとおりです。

var {Cc, Ci, Cr, Cu} = require("chrome");
var {XPCOMUtils} = Cu.import("resource://gre/modules/XPCOMUtils.jsm");
var httpRequestObserver =
{
  QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
  ...
};

observer-serviceただし、すでにpackageが必要なので、それを使用する方が簡単です。

var observer = require("observer-service");
observer.add("http-on-examine-response", onHttpRequest);

function onHttpRequest(subject, data)
{
  ...
}

このアプローチの欠点observer-serviceは、内部パッケージであることと、その API が将来のアドオン SDK バージョンで変更される可能性があることです。

于 2011-10-19T07:17:43.820 に答える