如何在 Firefox 中强制下载 PDF?

Анд*_*рей 9 javascript firefox

我有以下用于从后端下载 PDF 文件的代码:

    const link = document.createElement('a')

    link.href = URL.createObjectURL(blob)

    link.setAttribute('target', '_blank')
    link.setAttribute('download', file_name)

    link.click()
    link.remove()
    setTimeout(() => window.URL.revokeObjectURL(url), 100)
Run Code Online (Sandbox Code Playgroud)

它在 Chrome 中按预期工作,我相信它以前在 Firefox 中工作,但现在 Firefox 在同一选项卡中打开文件而不是下载,忽略目标和下载属性。

Ach*_*him 14

这是 98 及以上版本的预期行为。默认情况下,PDF 设置为在 Firefox 中打开。

如果您将 Blob 的 mimetype 更改为“application/octet-stream”,或者将其 href 分配给页面内的 iframe 的链接作为目标,我想您会恢复以前的行为。

当下载属性应用时,它的处理方式与服务器发送的“Content-Disposition:附件”标头相同。Firefox 开发人员认为用户的偏好应该胜过服务器所说的内容 - 无论用户是否表示希望 PDF 在外部应用程序(Acrobat 或 w/e)中打开、自动保存到磁盘或在 Firefox 中打开。

来源:https ://bugzilla.mozilla.org/show_bug.cgi?id=1756980

编辑:
Firefox 在同一选项卡中打开文件并忽略目标属性是一个错误。

来源:https ://bugzilla.mozilla.org/show_bug.cgi?id=1759916

  • 更改为 `const blob = new Blob([response.data], { type: 'application/octet-stream' });` 有效。 (2认同)