我试图修改adblockplus代码以进行测试。我正在修改代码以在URL上发送http get请求并从响应中获取最终的URL。我尝试使用以下代码,但响应不包含标头响应中的位置字段。我在firefox扩展中这样做,所以我不认为跨域请求会有任何问题。为什么我无法从响应中获取位置字段?有没有更好的方法来完成这项任务?
预期输出 - http://www.mensxp.com/
实际输出 - 位置:null
以下是我正在使用的代码 -
function geturl(url){
let req= Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Ci.nsIXMLHttpRequest);
req.open("GET", url);
req.overrideMimeType("text/plain");
req.send(null);
req.onreadystatechange = function() {
if (req.readyState == 4)
{ if (req.status == 200)
{ try
{
location = req.getResponseHeader("Location");
console.log("Location is: " + location);
}
catch(e){
console.log("Error reading the response: " + e.toString());
}
}
}
解决方案 -
我终于找到了解决方案。我没有得到最后的答复。所以我将重定向限制设置为0,现在我可以在标题中获取Location字段。 这是我添加到我的代码中的内容 -
if (request.channel instanceof Ci.nsIHttpChannel)
request.channel.redirectionLimit = 0;
答案 0 :(得分:1)
因为状态代码200表示正常,所以不会执行您的try块。 “位置”字段仅在重定向中退出,状态代码为301或302。
该网址回复302,因此将req.status == 200
更改为req.status == 302
。
答案 1 :(得分:1)
实际上你必须检查readyState == 2
,即HEADERS_RECEIVED状态