Расширение Firefox, отслеживающее реакцию - PullRequest
1 голос
/ 18 октября 2011

Я пытаюсь использовать код

// 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); не печатает ничего в журнале консоли. почему?

Ответы [ 2 ]

4 голосов
/ 19 октября 2011

В дополнение к проблеме, отмеченной Николаем, наблюдателю необходимо реализовать функцию QueryInterface() (обычно с помощью XPCOMUtils.generateQI () ).Вот как это можно сделать с помощью Add-on 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 пакет , его будет проще использовать:

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

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

Недостатком этого подхода является то, что observer-service является внутренним пакетом, и его API может измениться в будущих версиях Add-on SDK.

0 голосов
/ 19 октября 2011

Это настоящий фрагмент? Вы должны увидеть ошибку о том, что Components не определено в консоли ошибок. Либо получите его из require('chrome'), либо используйте объект из require("observer-service").

...