我正在创建一个针对我无权访问其服务器的特定站点的扩展。我正在尝试以一种允许我使用 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 侦听器的阻塞部分完全阻止事件被触发,如果我移除阻塞,则没有足够的时间来附加标头。所以我的问题是什么会阻止它正确触发事件?