2017-10-11 1 views
0

사용자에게 텍스트 파일을 생성하려고합니다. 아래 코드는 IE와 Edge를 제외한 모든 브라우저에서 완벽하게 작동합니다 (후자의 경우 ' 파일의 이름을 제어하지는 않지만 최소한 제작 된 것).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 다운로드 속성을 지원하지 않습니다. Internet Explorer의 결과는 파일을 사용할 때 다릅니다 : 프로토콜. 또는 localhost. –

+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와 크롬 전체 솔루션은 그렇게 될 것이다 :

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

아니요,이 솔루션은 msSaveBlob 함수로 인해 IE와 Edge에서만 작동합니다. FF 및 Chrome 용 조건을 추가해야합니다. if (window.navigator.msSaveOrOpenBlob) // IE 및 Edge {} else {// Chrome 및 FF} ' –

관련 문제