无法提供文件从Angular下载到IE浏览器
我正在尝试为我的用户生成一个文本文件,下面的代码在除IE和Edge之外的所有浏览器中完美地完成了这项工作(在后者中, t控制文件的名称,但它至少已生成)。无法提供文件从Angular下载到IE浏览器
emitFile(stage: any): void {
const blob = new Blob([stage.elaboration], { type: "text/csv" });
const url = window.URL.createObjectURL(blob);
const anchor = document.createElement("a");
anchor.href = url;
anchor.download = "ff-rocks-ie-sucks.txt";
anchor.click();
}
有没有在这方面an open issue ticket但它月18日几个月前和最近的活动是相当联合国最近。这似乎是希望消亡的地方。
我还没有找到任何合理的解决方法。我见过的那些人或者不工作,或者包含一个(非常明智但不可行)的建议,以便为了鸭子的目的而获得体面的浏览器。我相信这是一个错误而不是鸟类的参考。
该怎么办?
您应该尝试使用msSaveBlob()代替下载属性。
emitFile(stage: any): void {
const blob = new Blob([stage.elaboration], { type: "text/csv" });
windows.navigator.msSaveBlob(blob,"ff-rocks-ie-sucks.txt");
}
它应该适用于IE和Edge。
编辑: 为IE,FF和Chrome完整的解决办法是这样的:
emitFile(stage: any): void {
const blob = new Blob([stage.elaboration], { type: "text/csv" });
if(window.navigator.msSaveOrOpenBlob) //IE & Edge
{
//msSaveBlob only available for IE & Edge
windows.navigator.msSaveBlob(blob,"ff-rocks-ie-sucks.txt");
}
else //Chrome & FF
{
const url = window.URL.createObjectURL(blob);
const anchor = document.createElement("a");
anchor.href = url;
anchor.download = "ff-rocks-ie-sucks.txt";
document.body.appendChild(anchor); //For FF
anchor.click();
//It's better to remove the elem
document.body.removeChild(anchor);
link.remove();
}
}
你是否建议'emitFile'方法应该识别应用程序运行在哪个浏览器并作出相应的反应?或者有没有办法根据特定的标记调用它的正确版本? – DonkeyBanana
不,这个解决方案只适用于IE和Edge,因为msSaveBlob函数。 您需要为FF和Chrome添加条件: 'if(window.navigator.msSaveOrOpenBlob)// IE&Edge {} else {// Chrome&FF} ' –
IE11不支持下载属性。使用file:协议时,IE中的结果有所不同。或本地主机。 –
而且没有解决方法?我希望能以某种方式实现**。我想我运气不好......请将它作为回复发布,以便它可以(不愿意)被接受。 :) – DonkeyBanana