перехватчик пакетов аддона - PullRequest
1 голос
/ 15 марта 2012

Я хочу прослушать пакеты с моим аддоном. Я использую вопрос переполнения стека в качестве подсказки. Мой полный код такой:

// This is an active module of the Add on
exports.main = function() {
var {Cc, Ci,Cu} = require("chrome");
var widgets = require("widget");
var windows = require("windows").browserWindows;

Cu.import("resource://gre/modules/XPCOMUtils.jsm"); 

XPCOMUtils.defineLazyServiceGetter(this, "activityDistributor",
                                       "@mozilla.org/network/http-activity-distributor;1",
                                       "nsIHttpActivityDistributor");

    let httpTrafficObserver = {

      /**
       * Begin observing HTTP traffic that we care about,
       * namely traffic that originates inside any context that a Heads Up Display
       * is active for.
       */
      startHTTPObservation: function httpObserverFactory()
      {
        // creates an observer for http traffic
        var self = this;
        var httpObserver = {
          observeActivity :
          function observeActivity(aChannel,
                                   aActivityType,
                                   aActivitySubtype,
                                   aTimestamp,
                                   aExtraSizeData,
                                   aExtraStringData)
          {
            if (aActivityType ==
                  activityDistributor.ACTIVITY_TYPE_HTTP_TRANSACTION ||
                aActivityType ==
                  activityDistributor.ACTIVITY_TYPE_SOCKET_TRANSPORT) {

              aChannel = aChannel.QueryInterface(Ci.nsIHttpChannel);

              let transCodes = this.httpTransactionCodes;

              if (aActivitySubtype ==
                  activityDistributor.ACTIVITY_SUBTYPE_REQUEST_HEADER ) {

                let httpActivity = {
                  url: aChannel.URI.spec,
                  method: aChannel.requestMethod,
                  channel: aChannel
                };

              }
            }
          },

          httpTransactionCodes: {
            0x5001: "REQUEST_HEADER",
            0x5002: "REQUEST_BODY_SENT",
            0x5003: "RESPONSE_START",
            0x5004: "RESPONSE_HEADER",
            0x5005: "RESPONSE_COMPLETE",
            0x5006: "TRANSACTION_CLOSE",

            0x804b0003: "STATUS_RESOLVING",
            0x804b0007: "STATUS_CONNECTING_TO",
            0x804b0004: "STATUS_CONNECTED_TO",
            0x804b0005: "STATUS_SENDING_TO",
            0x804b000a: "STATUS_WAITING_FOR",
            0x804b0006: "STATUS_RECEIVING_FROM"
          }
        };

        this.httpObserver = httpObserver;

        activityDistributor.addObserver(httpObserver);
      }

    };


var example = windows.open("http://www.example.com");

var widget = widgets.Widget({
  id: "close-window",
  label: "Close window",
  contentURL: "http://www.mozilla.org/favicon.ico",
  onClick: function() {
    example.close();
  }
});
};

Консоль браузера сообщает мне Reference Error: XPCOMUtils is not defined. Почему это?

ОБНОВЛЕНИЕ : я применил Владимир Палант , но теперь есть еще одна ошибка:

An exception occurred.
Traceback (most recent call last):
 File ".../XPCOMUtils.jsm", line 231, in XPCU_defineLazyServiceGetter
 File ".../XPCOMUtils.jsm", line 208, in XPCU_defineLazyGetter
TypeError: aObject.__defineGetter__(aName, function()
 {delete aObject[name];return aObject[name] == aLambda.apply(aObject);})
 is not extensible

Ответы [ 2 ]

1 голос
/ 15 марта 2012

Когда вы используете Cu.import() в расширении Add-on SDK, переменные не добавляются автоматически ( ошибка 683217 ). Обходной путь прост:

var {XPCOMUtils} = Cu.import("resource://gre/modules/XPCOMUtils.jsm");

Что касается вашего обновления, я не уверен, что this означает, что вы пытаетесь определить метод получения, но это определенно не глобальный объект - и Object.freeze() был применен к нему что никакие новые свойства не могут быть добавлены (вот что вызывает «нерасширяемую» ошибку). Вместо этого имеет смысл определить ваш ленивый получатель для объекта httpTrafficObserver:

XPCOMUtils.defineLazyServiceGetter(httpTrafficObserver, "activityDistributor",
                                   "@mozilla.org/network/http-activity-distributor;1",
                                   "nsIHttpActivityDistributor");

Конечно, в startHTTPObservation вы бы использовали self.activityDistributor вместо того, чтобы предполагать, что activityDistributor является глобальной переменной.

0 голосов
/ 16 февраля 2014

это происходит при поиске по запросу Bing Top при поиске ленивой загрузки.

, но я не научился использовать, пока не прочитал эту статью.так что для всех тех пользователей, которые сталкиваются с этой темой, прочитайте это, это очень легко понять.я теперь ленивый груз успешно.http://mike.kaply.com/2011/02/08/adding-services-to-your-firefox-add-on/

...