Javascript 修改webRequest的onHeadersReceived事件中的响应头以启动“请求”;另存为;窗口

Javascript 修改webRequest的onHeadersReceived事件中的响应头以启动“请求”;另存为;窗口,javascript,firefox-addon-webextensions,Javascript,Firefox Addon Webextensions,我正在试验web扩展,并试图通过将内容配置设置为附件来修改响应头,以使XMLHttpRequest()的结果可下载 现在,我只是尝试用三个最基本的初始化下载的方法来替换收到的响应头,如本文所述。我认为代码与WebRequestWeb文档中提供的非常简短的内容一致,该文档正在修改请求头 我拥有manifest.json文件中所有_URL的webRequest和webRequestBLocking权限和主机权限 此代码完成后,当我写出GET请求收到的响应头时,它保持不变。我确信这段代码可以运行,因为

我正在试验web扩展,并试图通过将内容配置设置为附件来修改响应头,以使XMLHttpRequest()的结果可下载

现在,我只是尝试用三个最基本的初始化下载的方法来替换收到的响应头,如本文所述。我认为代码与WebRequestWeb文档中提供的非常简短的内容一致,该文档正在修改请求头

我拥有manifest.json文件中所有_URL的webRequest和webRequestBLocking权限和主机权限

此代码完成后,当我写出GET请求收到的响应头时,它保持不变。我确信这段代码可以运行,因为我在每个阶段都会从内部将消息发送回内容脚本;并且onHeadersReceived事件在GET请求的onreadystatechange事件之前完成

发布了许多问题,指出修改后的标题无法在开发工具中查看,但我写下了GET请求收到的内容。问题指出onHeadersReceived使用代理头,您不能真正更改这些头,并且要在onResponseStarted中这样做;但这也不起作用

我希望响应头启动一个“另存为”窗口,将GET响应返回的数据下载到客户机磁盘

我一定错过了一些非常基本的东西。我做错了什么或没有做什么?多谢各位

 browser.webRequest.onHeadersReceived.addListener(

  listener,

  { urls : ["<all_urls>"] }, 

  ["blocking", "responseHeaders"]

 );




 function listener( details) {

   details.responseHeaders = [ { 'Content-Type' : 'text/html; charset=utf-8' }, { 'Content-Disposition' : 'attachment; filename="fileName.html"' }, { 'Content-Length' : '22' } ];

   return { responseHeaders : details.responseHeaders };

 }
browser.webRequest.onHeadersReceived.addListener(
听众,
{URL:[“”]},
[“阻拦”、“负责人”]
);
函数侦听器(详细信息){
details.responseHeaders=[{'Content-Type':'text/html;charset=utf-8'},{'Content-Disposition':'attachment;filename=“filename.html”},{'Content-Length':'22'}];
返回{responseHeaders:details.responseHeaders};
}

要下载带有chrome扩展的链接,请尝试以下操作:

browser.downloads.download({
    url: details.url,
    filename: "suggested name"
});

谢谢我可以下载一个文件,但我尝试做的是将数据作为流从indexedDB写入客户机磁盘,而不是首先在RAM中构建一个大blob文件作为一个大文件下载。流过滤器API似乎是一种可能性,但我不知道如何将流下载到下载中。有人建议尝试拦截一个web请求并更改标题,但我也无法让它起作用。全文如下: