首页 > 解决方案 > 使用 Safari 下载数据 URL

问题描述

我们正在开发一个应用程序,我们需要在其中下载在客户端生成的 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 但它不起作用,amybe 我做错了。我还尝试了其他库,如文件保护程序、保存文件,所有这些库都在 npm 上可用,结果相同,无法将顶部框架导航到数据 url。

有什么提示吗?谢谢。

标签: javascriptfiledownloadsafariblob

解决方案


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


推荐阅读