17

kimin başlattığı tanımlayın (örneğin, RSS akış güncelleştirmeleri, uzantı yöneticisi istekleri, XPCOM bileşenlerinden gelen XHR istekleri, vb.)Firefox - i web sayfası/sekmelerin gelen istek ve gelen bütün kalanını ayırmak mümkün duyuyorum <code>http-on-modify-request</code> benim şimdiki koduyla Aslında</p> <p>ile firefox tüm http isteklerine müdahale benim şimdiki addon HTTP isteği

Web trafiğinden ayrı bir isteği kimin başlattığını yalnızca tüm gruba göre değil (RSS feed güncelleştirmeleri, uzantılarla değil) tanımlamak istiyorum yönetici talepleri, XPCOM bileşenlerinden gelen XHR talepleri, vb.)?

Örnek: özel değişkenini requestRequestor

Ben çözümsüz bu silimar soruyu Identify requests coming from PageWorker fould belirli addon veya RSS güncellemesi vs. tanımlamak için bir değere sahip olacaktır.

Güncel kod tüm grup (getting the browser that fires the http-on-modify-request notification) benzer tanımlamak için:

Components.utils.import('resource://gre/modules/Services.jsm'); 
Services.obs.addObserver(httpObs, 'http-on-modify-request', false); 
//Services.obs.removeObserver(httpObs, 'http-on-modify-request'); //uncomment this line, or run this line when you want to remove the observer 

var httpObs = { 
    observe: function (aSubject, aTopic, aData) { 
     if (aTopic == 'http-on-modify-request') { 
      /*start - do not edit here*/ 
      var oHttp = aSubject.QueryInterface(Components.interfaces.nsIHttpChannel); //i used nsIHttpChannel but i guess you can use nsIChannel, im not sure why though 
      var interfaceRequestor = oHttp.notificationCallbacks.QueryInterface(Components.interfaces.nsIInterfaceRequestor); 
      //var DOMWindow = interfaceRequestor.getInterface(Components.interfaces.nsIDOMWindow); //not to be done anymore because: https://developer.mozilla.org/en-US/docs/Updating_extensions_for_Firefox_3.5#Getting_a_load_context_from_a_request //instead do the loadContext stuff below 
      var loadContext; 
      try { 
       loadContext = interfaceRequestor.getInterface(Components.interfaces.nsILoadContext); 
      } catch (ex) { 
       try { 
        loadContext = aSubject.loadGroup.notificationCallbacks.getInterface(Components.interfaces.nsILoadContext); 
        //in ff26 aSubject.loadGroup.notificationCallbacks was null for me, i couldnt find a situation where it wasnt null, but whenever this was null, and i knew a loadContext is supposed to be there, i found that "interfaceRequestor.getInterface(Components.interfaces.nsILoadContext);" worked fine, so im thinking in ff26 it doesnt use aSubject.loadGroup.notificationCallbacks anymore, but im not sure 
       } catch (ex2) { 
        loadContext = null; 
        //this is a problem i dont know why it would get here 
       } 
      } 
      /*end do not edit here*/ 
      /*start - do all your edits below here*/ 
      var url = oHttp.URI.spec; //can get url without needing loadContext 
      if (loadContext) { 
       var contentWindow = loadContext.associatedWindow; //this is the HTML window of the page that just loaded 
       //aDOMWindow this is the firefox window holding the tab 
       var aDOMWindow = contentWindow.top.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIWebNavigation).QueryInterface(Ci.nsIDocShellTreeItem).rootTreeItem.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindow); 
       var gBrowser = aDOMWindow.gBrowser; //this is the gBrowser object of the firefox window this tab is in 
       var aTab = gBrowser._getTabForContentWindow(contentWindow.top); //this is the clickable tab xul element, the one found in the tab strip of the firefox window, aTab.linkedBrowser is same as browser var above //can stylize tab like aTab.style.backgroundColor = 'blue'; //can stylize the tab like aTab.style.fontColor = 'red'; 
       var browser = aTab.linkedBrowser; //this is the browser within the tab //this is what the example in the previous section gives 
       //end getting other useful stuff 
      } else { 
       Components.utils.reportError('EXCEPTION: Load Context Not Found!!'); 
       //this is likely no big deal as the channel proably has no associated window, ie: the channel was loading some resource. but if its an ajax call you may end up here 
      } 
     } 
    } 
}; 

Teşekkür zaman HTTP başlığı içinde KULLANICI AJAN bakmak gerekir

+3

Burada harika bir iş çıkardın, şu konuyu gördünüz mü: http://stackoverflow.com/questions/27483651/firefox-addon-monitoring-network/27492685#27492685 Daha fazla konuya katkıda bulunabileceğiniz bir konu Şimdiye kadar kaynakları nasıl tanımladığınızı çok merak ediyorum. – Noitidart

+1

Bağlantınız için teşekkürler brode firefox istekleri hakkında sahip olduğum daha fazla bilgi daha fazla benim addon daha iyi olacak, gelişmiş bir güvenlik addon üzerinde çalışıyor, kolay değil, (sadece bir hobi addon halka olacak;) github hakkında bilgi sahibi olursun – intika

+0

Kodumu daha sonra bağlayacağın soru üzerine göndereceğim;) – intika

cevap

İlgili konular