Chrome WebRequest未正确阻止

时间:2013-01-14 07:07:34

标签: javascript jquery google-chrome-extension

我正在创建针对特定网站的扩展程序,该网站的服务器我无法访问。我试图以一种允许我使用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"]);

现在,匹配非常具体,足以通过正常导航到匹配的网址来触发这些事件。在这样做的事情进行得非常好,当然不是HEAD请求它不会添加任何东西。即使我允许所有重定向的请求,标题也会添加得很好。当我尝试在我的后台js文件中的另一个地方调用它时,我的问题出现了:

 $.ajax({
   url: url,
   data: datas,
   type: "HEAD",
   success: function(data,statusCode, jqXHR){
     console.log(jqXHR.getAllResponseHeaders());
   }      
 }); 

onHeadersRecieved侦听器的阻塞部分可以防止事件被触发,如果我删除阻塞,则没有足够的时间来追加标头。所以我的问题是什么可以阻止它正确地发射事件?

1 个答案:

答案 0 :(得分:0)

好吧,这似乎是Chrome中的一个错误,而不是我的代码中的错误,修复程序应该在某个时候一直运行到稳定的通道,希望更快,而不是更晚。我相信它可能是this issue,或者至少与它有关,并且此代码已确认可在26.0.1386.0 canary中使用。