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} ' –