javascript - Firefox 没有将正确的文件下载到机器上
问题描述
我有一个我构建的 react 应用程序,它使用 redux、react router v4 和 d3 来可视化数据。我的应用程序包含一个力导向图、一个表格和一个直方图。这些视图中的每一个都包含可单击的节点、表格单元格和条形图,当单击它们时,文件应下载到用户的机器上。我最近将 firefox 更新到最新版本 62.0.2 并且下载不再按预期运行,但它在 Chrome 中仍然可以正常工作。这些文件与应用程序位于同一个域中,我已将下载代码编写为:
let newlink = document.createElement('a');
newlink.setAttribute('download',
'https://www.example.com/docs/xml/file1.xml');
newlink.setAttribute('href', 'https://www.example.com/docs/xml/file1.xml');
newlink.setAttribute('target', '_blank');
document.body.appendChild(newlink);
newlink.click();
Firefox 正在做的是在我的应用程序根目录下载 index.html 文件,而不是在 url 变量中下载文件(例如https://www.example.com/docs/xml/file1.xml)。对话框显示它实际上是在尝试使用正确的名称保存文件(Firefox 已自动将“/”替换为下划线以保存文件。域是正确的,但该位置不包含文件的完整 URL。完整的 URL 是否以某种方式被截断?
对话框上的类型是 HTML(这是不正确的,我的所有文件都是 xml 或 txt),如果用户选择保存或打开,它会保存 index.html 或打开一个空白/黑色网页。我要疯了,想弄清楚这里发生了什么。请帮忙!
解决方案
最终在 Firefox 中解决此问题的是通过导航到 about:serviceworkers(在 Firefox 中)从应用程序的域中取消注册服务工作者。然后我在我的 UI 代码中注释掉了注册服务工作者函数,因为无论如何我都没有在这个应用程序中使用它们。无论出于何种原因,服务人员拦截了文件下载并导致浏览器下载 index.html 文件而不是它应该下载的文本文件。一旦我做了这两件事,文件就被正确下载了。如果有人知道为什么会这样,我很乐意发表评论。
推荐阅读
- reactjs - 如何将基于类的组件转换为基于函数的组件?
- javascript - 数量变化时如何计算表格中一行的总和
- c# - 任何人都可以知道如何处理(错误 CS1525:意外符号)
- python - 如何在 python 中使用 woo commerce rest api 在不替换现有产品的情况下添加其他产品图像
- javascript - 在使用 React 渲染之前初始化数据
- laravel - Laravel 7强制用户输入密码
- android - SDK >=26 仍需要 mipmap/ic_launcher.png?
- openstack - 未能在 openstack-neutron 中绑定端口
- python - python中的匹配数据类型
- dns - 是否可以“伪造”名称服务器?