我正在开发Chrome扩展程序,以下载网页上的链接。
我遇到了一些没有直接下载的链接,例如这样的http://downloads.sourceforge.net/sevenzip/7z920-x64.msi

当我在提琴手上跟踪链接时,我得到的是HTTP状态302(这是重定向)。因此,我尝试在使用XMLHTTPRequest下载之前测试链接,但是我无法检索状态302,XMLHTTPRequest仅检索文件状态200?

有没有办法使它停在302处,或者可以替代AJAX调用?

最佳答案

使用chrome.webRequest api可以做到这一点。 302等通常由浏览器静默处理,但是您可以使用此方法停止它们或使它们对您的代码更可见。

chrome.webRequest.onHeadersReceived.addListener(function(details){
    var redirUrl;
    details.responseHeaders.forEach(function(v,i,a){
      if(v.name == "Location"){
       redirUrl = v.value;
       details.responseHeaders.splice(i,1);  //Kill the redirect
      }
    });
    if(redirUrl)
      details.responseHeaders.push({name:"redirUrl",value:redirUrl});
    return {responseHeaders:details.responseHeaders};
},
{urls: ["http://*/*"],tabId:-1},["responseHeaders","blocking"]);


我将tabId指定为-1,这意味着它仅应用于不是来自选项卡(即背景页面)的请求。这将无提示地阻止重定向,同时允许您访问302状态和要重定向到的URL。

09-12 13:26