【发布时间】:2018-10-02 15:17:37
【问题描述】:
我有一个我构建的 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 或打开一个空白/黑色网页。我要疯了,想弄清楚这里发生了什么。请帮忙!
【问题讨论】:
-
服务器为请求的文件返回的 MIME 类型是什么?
-
服务器没有向我返回文件。它返回一个 JSON 对象,其中一个字段是我反过来构建锚标记的 url。
-
所以最终在 Firefox 中解决此问题的是从域中取消注册服务工作人员,并在我的 UI 代码中注释掉注册服务工作人员功能。无论出于何种原因,服务人员拦截了这个并导致了这个问题。
标签: javascript reactjs d3.js react-router