使用 Safari 下载数据 URL

Posted

技术标签:

【中文标题】使用 Safari 下载数据 URL【英文标题】:Download a Data URL using Safari 【发布时间】:2021-12-07 00:06:54 【问题描述】:

我们正在开发一个应用程序,我们需要在其中下载客户端生成的 PDF 文件。 我们使用字符串将文件内容输入数据 URL,如下所示:

const pdfContent = 'xxxxx';
    const element = document.createElement('a');
    element.setAttribute('href', `data:application/pdf;charset=utf-8,$encodeURIComponent(pdfContent)`);
    element.setAttribute('download', 'mypdf.pdf');
    element.style.display = 'none';

    document.body.appendChild(element);

    element.click();

    document.body.removeChild(element);

这在使用 Microsoft Edge 时效果很好,但在 Safari 中出现错误提示“不允许将顶部框架导航到数据 URL”。

主机应用程序不允许使用 window.open() 或任何此类技巧,我尝试使用 iframe 但它不起作用,我可能做错了。 我还尝试了其他库,如文件保护程序、保存文件,所有这些库都在 npm 上可用,结果相同,无法将顶部框架导航到数据 url。

有什么提示吗?谢谢。

【问题讨论】:

【参考方案1】:

我最终使用了一个 blob 流,它部分工作,因为我仍然无法下载,因为它在沙盒环境(Office 插件)上运行。我想我们将不得不求助于打开浏览器窗口并在那里下载文件,除非有人有更好的 Office 加载项替代方案。

【讨论】:

以上是关于使用 Safari 下载数据 URL的主要内容,如果未能解决你的问题,请参考以下文章

Safari 5.1.7 下载文件名未知的 csv 文件

Safari(或 Apple OS)将 .txt 添加到 .csv 下载

Safari 添加 .html 以使用 epplus jquery.fileDownload.js 下载 xlsx

macbook 无论用safari还是chrome下载 点击下载后下载的目标地址出现在地址栏而网页时空白的,不会自动下载

在 Safari 5.1.7 中下载 PDF 文件

无法在 Safari 浏览器中下载 ICS 文件