Javascript/[중요] Javascript

익스플로러에서 간단한 파일다운로드 기능

마샤와 곰 2019. 4. 27. 22:45

 

 

익스플로러를 쓰는 인구의 비중이 아마도..우라니라만 무지 높을 것 같다.

공공기관을 가보면 대부분의 실무자들이 익스플로러만 쓴다....엣지는요..?ㅠㅠ

크롬, 파폭, 엣지에서 잘 되던 기능이 익스플로러만 가면 안되는 경우가 너무나도 많으며...특히 HTML5에서 태그들의 좋은 속성이 잘 안되는 경우가 허다 하다.

특히..a테그의 download 기능은 무척이나 편리해서...서버에서 따로 작업을 안해도 간단한 파일 따위는 브라우저가 알아서 파일 다운로드를 하게 해주는데..

문제는 익스플로러에서는 이 download 속성이 지원되지 않는 것이다.

그러면 서버에서 응답하는 프로세스를 만들어야하는데..무척이나 귀찮고 하기 싫은 일이다.

자바스크립트에서는 navigator객체를 통해서 여러 기능을 지원하고 있다.

브라우저 종류확인, 스트림확인 등 안내역할을 하는데..해당 기능 중 save or open 이라는 이름을 가진 메소드가 존재한다. 해당 메소드를 사용하면 간단하게 파일다운로드 기능구현이 가능하다.

function simpleDownloader(url){
    $.post(url,
        {param: "value"},   // 요청할 변수들
            function (data) {                      //성공콜백
                var BOM = "\uFEFF";                        //엑셀바이트 순서표시
                if (navigator.msSaveBlob) {                //익스플로러면..
                    var blobObject = new Blob([BOM + data], {type: ' type: "text/plain; charset=utf-8"'});
                    window.navigator.msSaveOrOpenBlob(blobObject, "test.txt");
                }
                else {                                     // 익스아니면
                    var a = window.document.getElementById("다운로드용A테그");
                    a.setAttribute('href', 'data:text/plain; charset=utf-8,' + encodeURIComponent(BOM + data));
                    a.setAttribute('download', url);
                    a.click();
                }
            }).fail(function () {
            console.log('post error')
    });		
}

일반 ajax로 구현해도 상관없다.

공통 스크립트에 추가해서 사용하면 끝.

반응형