【问题标题】:Modifying response headers in onHeadersReceived event of webRequest to initiate a "Save as" window修改 webRequest 的 onHeadersReceived 事件中的响应标头以启动“另存为”窗口
【发布时间】:2019-02-18 14:33:38
【问题描述】:

我正在尝试使用 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-addon-webextensions


    【解决方案1】:

    要下载带有 chrome 扩展的链接,试试这个:

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

    【讨论】:

    • 谢谢。我可以下载一个文件,但我想要做的是将 indexedDB 中的数据作为流写入客户端磁盘,而不是首先在 RAM 中构建一个大 blob 文件以作为一个大文件下载。流过滤器 API 似乎是一种可能性,但我不知道如何让流进入下载。有人建议尝试拦截 Web 请求并更改标头,但我也无法使其正常工作。完整描述在这里:stackoverflow.com/questions/51006619/…
    猜你喜欢
    • 2015-01-23
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多