2013-05-16 25 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