javascript - 捕获重定向下载链接的 HTTP 状态 300

标签 javascript jquery ajax google-chrome-extension xmlhttprequest

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

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

是否有解决此问题的技巧使其在 302 处停止或可能是 AJAX 调用的不同替代方法?

最佳答案

这可以通过使用 chrome.webRequest 来实现。接口(interface)。 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。

关于javascript - 捕获重定向下载链接的 HTTP 状态 300,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15944833/

相关文章:

javascript - Knockout.JS 打印数字列表

javascript - 替换数据属性中的最后一个破折号值?

javascript - 如何在GridView中选择和检查DropDownList的变化?

javascript - 为什么这个 Javascript POST 不起作用?

javascript - window.open() 在 AJAX 成功时的工作方式不同

javascript - 如何以对象为成员循环遍历纯 JavaScript 对象

javascript - 如何访问 React Context.Provider 值中的另一个函数?

javascript - Sweet Alert 2 的多种模式

javascript - 为什么 jQuery 可以在服务器上计算宽度,但在本地运行时却不能?

javascript - 问题是在 django 中使用 ajax 保存多条记录