サーバーにアクセスできない特定のサイトを対象とした拡張機能を作成しています。HEAD リクエストを使用してリダイレクト URL を取得できるように、HTTP 302 リダイレクトを処理しようとしています。そうするための私のコードはこれです:
var redirUrl = "";
var requestId = 0;
chrome.webRequest.onBeforeRedirect.addListener(function(details){
console.log("before redirect");
if(details.method == "HEAD"){
redirUrl = details.redirectUrl;
requestId = details.requestId;
}
},
{urls: [matchUrl]});
chrome.webRequest.onHeadersReceived.addListener(function(details){
console.log("on headers received");
if(details.requestId == requestId){
var temp = {"name":"redirUrl","value":redirUrl};
details.responseHeaders.push(temp);
}
return {responseHeaders:details.responseHeaders};
},
{urls: [matchUrl]},["responseHeaders", "blocking"]);
chrome.webRequest.onCompleted.addListener(function(details){
console.log(JSON.stringify(details.responseHeaders));
},
{urls: [matchUrl]},["responseHeaders"]);
現在、マッチングは、一致した URL への通常のナビゲーションでこれらのイベントをトリガーするほど具体的ではありません。そうすることで、物事は完全にうまく進みます。もちろん、HEAD リクエストではないので、何も追加しません。リダイレクトされたリクエストをすべて許可しても、ヘッダーは問題なく追加されます。バックグラウンドjsファイルの別の場所でこれを呼び出そうとすると、問題が発生します。
$.ajax({
url: url,
data: datas,
type: "HEAD",
success: function(data,statusCode, jqXHR){
console.log(jqXHR.getAllResponseHeaders());
}
});
onHeadersRecieved リスナーのブロッキング部分により、イベントがまったく発生しなくなります。ブロッキングを削除すると、ヘッダーを追加するのに十分な時間がありません。だから私の質問は、何がイベントを適切に発生させるのを妨げているのでしょうか?