2013-05-16 60 views
4

我是附加組件開發新手,我一直在努力解決這個問題。這裏有一些問題有點相關,但他們還沒有幫助我找到解決方案。Firefox附加組件SDK:獲取http響應標題

因此,我正在開發一個Firefox附加組件,該組件在瀏覽器的任何選項卡中加載任何網頁時會讀取一個特定的標頭。

我能夠觀察標籤加載,但我不認爲有一種方法來讀取以下(簡單)代碼中的http標頭,只有url。如果我錯了,請糾正我。

var tabs = require("sdk/tabs"); 
tabs.on('open', function(tab){ 
    tab.on('ready', function(tab){ 
    console.log(tab.url); 
    }); 
}); 
}); 

我也能夠通過觀察這樣的HTTP事件讀取響應頭:

var {Cc, Ci} = require("chrome"); 
var httpRequestObserver = 
{ 
    init: function() { 
     var observerService = Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService); 
     observerService.addObserver(this, "http-on-examine-response", false); 
    }, 

    observe: function(subject, topic, data) 
    { 
    if (topic == "http-on-examine-response") { 
     subject.QueryInterface(Ci.nsIHttpChannel); 
      this.onExamineResponse(subject); 
    } 
    }, 
    onExamineResponse: function (oHttp) 
    { 
     try 
     { 
     var header_value = oHttp.getResponseHeader("<the_header_that_i_need>"); // Works fine 
     console.log(header_value);   
     } 
     catch(err) 
     { 
     console.log(err); 
     } 
    } 
}; 

的問題(和個人混淆的主要來源)的是,當我在讀響應標題我不知道響應是針對哪個請求的。我想以某種方式映射請求(特別是請求url)和響應頭(「the_header_that_i_need」)。

回答

3

你幾乎在那裏,看看sample code here更多你可以做的事情。

onExamineResponse: function (oHttp) 
    { 
     try 
     { 
     var header_value = oHttp.getResponseHeader("<the_header_that_i_need>"); 
     // URI is the nsIURI of the response you're looking at 
     // and spec gives you the full URL string 
     var url = oHttp.URI.spec; 
     } 
     catch(err) 
     { 
     console.log(err); 
     } 
    } 

而且人們往往需要找到相關的標籤,這這回答Finding the tab that fired an http-on-examine-response event

+1

感謝指針布萊恩!我還發現,在onExamineResponse中,我可以調用oHttp.name返回請求的URL。我很驚訝標題在標籤的'ready'事件中不可用。該頁面被加載,所以我會認爲標題在那裏得心應手。 – mikko76