javascript - 使用 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。
有什么提示吗?谢谢。
解决方案
我最终使用了一个部分工作的 blob 流,因为我仍然无法下载,因为它在沙盒环境(Office 加载项)上运行。我想我们将不得不求助于打开浏览器窗口并在那里下载文件,除非有人有更好的 Office 加载项替代方案。
推荐阅读
- c++ - 为什么使用一个构造函数初始化引用成功但另一个构造函数失败
- reactjs - 反应原生背景颜色仅覆盖一半屏幕,如何解决?
- python - Selenium Driver:如何找到网页加载后添加的元素?
- javascript - 在制表器中从 json 加载数据?
- python - 我的结果是四舍五入的,我想要完整的答案
- javascript - Browserify with chrome extension:无法读取未定义的属性“_handle”
- hbase - 如何在 HBase 部分扫描中进行优化
- c# - 如何在.Net核心域模型中用值对象替换原始类型的验证?
- c# - 你如何在 C# 中用 2 个字符计数进行字符串拆分?
- flutter - 如何在 main.dart 中调用 changeNotifier 之前已经有一个flutter?