2017-10-11 145 views
0

我正在尝试为我的用户生成一个文本文件,下面的代码在除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日几个月前和最近的活动是相当联合国最近。这似乎是希望消亡的地方。

我还没有找到任何合理的解决方法。我见过的那些人或者不工作,或者包含一个(非常明智但不可行)的建议,以便为了鸭子的目的而获得体面的浏览器。我相信这是一个错误而不是鸟类的参考。

该怎么办?

+0

IE11不支持下载属性。使用file:协议时,IE中的结果有所不同。或本地主机。 –

+0

而且没有解决方法?我希望能以某种方式实现**。我想我运气不好......请将它作为回复发布,以便它可以(不愿意)被接受。 :) – DonkeyBanana

回答

1

您应该尝试使用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(); 
    } 
} 
+0

你是否建议'emitFile'方法应该识别应用程序运行在哪个浏览器并作出相应的反应?或者有没有办法根据特定的标记调用它的正确版本? – DonkeyBanana

+0

不,这个解决方案只适用于IE和Edge,因为msSaveBlob函数。 您需要为FF和Chrome添加条件: 'if(window.navigator.msSaveOrOpenBlob)// IE&Edge {} else {// Chrome&FF} ' –