SORU
10 ŞUBAT 2010, ÇARŞAMBA


Yeniden yönlendirme İsteği (nsiHttpChannel?) Firefox Uzantıları

Uzun bir süredir bu konuda çalışıyorum ve iyi sonuçlar.

var myObserver = {
    observe: function(subject, topic, data)
    {
        if (topic == "http-on-examine-response") 
        {   
             //  implement later
        } 
        else if(topic == "http-on-modify-request") 
        {
             //  implement later
        }
   },

   QueryInterface : function (id)
   {
       if (id.equals(Components.interfaces["nsIObserver"]) ||
           id.equals(Components.interfaces["nsISupports"]))
       {
           return this;
       }
       throw Components.results.NS_NOINTERFACE;
   }
};

var obs = new Service("observer-service", "ObserverService");
obs.addObserver(myObserver, "http-on-modify-request", false);

Temelde, http-on-modify-request, URİ incelemek için nasıl biliyorum, ilişkilendirilmiş olan ve bir sürü başka şeyler bul. Bir türlü çözemiyorum ne herhangi bir istek hiç gönderilmeden önce bir nsİHttpChannel alabilirim çünkü buradan mümkün olduğunu biliyorum isteği yeniden yönlendirmek için nasıl.

Herkes ne yapacağını biliyor musun? Birkaç hafta boyunca açık ve kapalı çalışıyor, ama bir yararı yok oldum:/.

CEVAP
26 EYLÜL 2012, ÇARŞAMBA


Yeni bir nsiHttpChannel kılarak bu, bu biraz karışık, bunu yapabiliriz ama neyse ki https-everywhere Bu bir https bağlantısı kuvvet uygular eklenti.

**6'nın kaynak kodu kullanılabilir. here

Kodların çoğu bunun için gerekli dosyaları

[IO Util.js] [ChannelReplacement.js]

Cc gibi temel değişkenleri şartıyla en yukarıdaki dosyaları ile rahat çalışabiliriz,Cı kurmak ve 12* *fonksiyonu tanımlanmış.

var httpRequestObserver =
{ 
  observe: function(subject, topic, data) {
    if (topic == "http-on-modify-request") {

        var httpChannel = subject.QueryInterface(Components.interfaces.nsIHttpChannel);     
        var requestURL = subject.URI.spec;

        if(isToBeReplaced(requestURL))  {

            var newURL = getURL(requestURL);        
             ChannelReplacement.runWhenPending(subject, function() {
                    var cr = new ChannelReplacement(subject, ch);
                    cr.replace(true,null);
                    cr.open();
                });
        }
    }

  },

  get observerService() {
    return Components.classes["@mozilla.org/observer-service;1"]
                     .getService(Components.interfaces.nsIObserverService);
  },

  register: function() {
    this.observerService.addObserver(this, "http-on-modify-request", false);

  },

  unregister: function() {
    this.observerService.removeObserver(this, "http-on-modify-request");

  }
};


httpRequestObserver.register();

Koddeğiştirinistek değil yönlendirmek.

Yeterince yukarıdaki kodu test ettik olsa da uygulama konusunda emin değilim. Bildiğim kadarıyla dışarı yapabilirsiniz, istenen kanalın tüm öznitelikleri ve geçersiz kanal için onları ayarlar kopyalar. Sonra bir şekilde çıktı orijinal isteği tarafından istenen yeni kanal kullanılarak temin edilir.

P. S. ben bu yaklaşımı önerildi ÖYLE bir yazı görmüştüm.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • EatingIn

    EatingIn

    12 EKİM 2013
  • ICON

    ICON

    19 EKİM 2011
  • Megan Parken

    Megan Parken

    19 Temmuz 2009