1

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

当我在提琴手上跟踪链接时,我得到了HTTP 状态 302(这是一个重定向)。所以我试图在使用 XMLHTTPRequest 下载之前测试链接,但我无法检索状态302, XMLHTTPRequest 只是检索文件状态200

是否有一个技巧可以让它停在 302 或者可能是 AJAX 调用的不同替代方案?

4

1 回答 1

3

这可以通过使用chrome.webRequestapi 来实现。302's 等通常由浏览器静默处理,但您可以使用此方法停止它们或使它们对您的代码更可见。

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。

于 2013-04-11T16:57:43.987 回答