テスト目的で adblockplus コードを変更しようとしていました。URL で http get 要求を送信し、応答から最終的な URL を取得するようにコードを変更していました。以下のコードを使用してみましたが、応答のヘッダー応答に Location フィールドが含まれていません。私はこれをFirefox拡張機能内で行っているので、クロスドメインリクエストが問題になるとは思わない. 応答から Location フィールドを取得できないのはなぜですか? このタスクを達成するためのより良い方法はありますか?
期待される出力 - 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;