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

问题描述 投票:0回答:1

我正在尝试使用Web扩展并尝试修改响应标头,以通过将Content-Disposition设置为附件来使XMLHttpRequest()的结果可下载。

现在,我只是试图用这个MDN Web Doc中描述的替换响应标头来替换三个最基本的响应标头来进行下载。我认为代码与webRequest web doc中提供的非常简短的example一致,后者正在修改请求标头。

我在manifest.json文件中拥有all_urls的webRequest和webRequestBLocking权限和主机权限。

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

发布了许多问题,指出修改后的头文件无法在开发工具中查看,但我正在写出GET请求收到的内容。 This问题表明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 };

 }
javascript firefox-webextensions
1个回答
0
投票

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

browser.downloads.download({
    url: details.url,
    filename: "suggested name"
});
© www.soinside.com 2019 - 2024. All rights reserved.