【问题标题】:Chrome WebRequest not blocking properlyChrome WebRequest 未正确阻止
【发布时间】:2013-04-15 15:50:07
【问题描述】:

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

【问题讨论】:

  • @Eric 你知道那是我的答案,对吧?

标签: javascript jquery google-chrome-extension


【解决方案1】:

嗯,这似乎是 chrome 中的一个错误,而不是我的代码中的错误,并且修复应该在某个时候向下工作到稳定通道,希望早点而不是晚点。我相信它可能是this issue,或者至少与它有关,并且此代码已确认在26.0.1386.0 canary 中工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 2014-04-07
    • 2012-11-29
    • 2020-12-16
    • 2012-12-11
    相关资源
    最近更新 更多