2017-09-08 2 views
0

인터넷 익스플로러를 사용하여 PDF 파일 콘텐츠를 다운로드하려고합니다 (C#으로 작성된 스크랩 응용 프로그램 및 WatIn 라이브러리 사용). 파일을 다운로드하려는 웹 사이트에서 보안 쿠키로 인증을 사용하므로 쿠키를 가져오고 HTTPClient을 사용하여 파일을 다운로드 할 수 없습니다. 그래서 Javascript에서 파일 콘텐츠를 가져와야합니다. 그 일을 처리했지만 IE10 +에서만 작동합니다. 여기 내가 사용하는 코드는 다음과 같습니다자바 스크립트로 PDF 파일 내용 다운로드

(function() { 
    try { 
     var a = new Uint8Array(1); 
     return; 
    } catch (e) {} 

    function subarray(start, end) { 
     return this.slice(start, end); 
    } 

    function set_(array, offset) { 
     if (arguments.length < 2) offset = 0; 
     for (var i = 0, n = array.length; i < n; ++i, ++offset) this[offset] = array[i] & 0xFF; 
    } 

    function TypedArray(arg1) { 
     var result; 
     if (typeof arg1 === 'number') { 
      result = new Array(arg1); 
      for (var i = 0; i < arg1; ++i) result[i] = 0; 
     } else result = arg1.slice(0); 
     result.subarray = subarray; 
     result.buffer = result; 
     result.byteLength = result.length; 
     result.set = set_; 
     if (typeof arg1 === 'object' && arg1.buffer) result.buffer = arg1.buffer; 
     return result; 
    } 
    window.Uint8Array = TypedArray; 
    window.Uint32Array = TypedArray; 
    window.Int32Array = TypedArray; 
})(); 

function _arrayBufferToBase64(buffer) { 
    var binary = ''; 
    var bytes = new Uint8Array(buffer); 
    var len = bytes.byteLength; 
    for (var i = 0; i < len; i++) { 
     binary += String.fromCharCode(bytes[i]); 
    } 
    return window.btoa(binary); 
} 
var callFinished = false; 
var callPDFResult = ''; 
var xhr = new XMLHttpRequest(); 
xhr.open('GET', 'fileUrl', true); 
if ('responseType' in xhr) { 
    xhr.responseType = 'arraybuffer'; 
} else if ('overrideMimeType' in xhr) { 
    xhr.overrideMimeType('text/plain; charset=x-user-defined'); 
} else { 
    xhr.setRequestHeader('Accept-Charset', 'x-user-defined'); 
} 
xhr.onreadystatechange = function() { 
    if (xhr.readyState == XMLHttpRequest.DONE) { 
     callFinished = true; 
     callPDFResult = _arrayBufferToBase64(xhr.response); 
    } 
}; 
xhr.send(null); 

이 코드의 문제는 그것이 IE9 및 이전 버전에서는 작동하지 않습니다. 당신이 XHR에서 볼 수 있듯이 https://github.com/Stuk/jszip-utils

: 나는 IE8 및 IE9 적어도 내가 알고있는 것처럼

+0

무엇이 당신의 질문입니까? –

+0

IE9가 정말로 필요합니까? –

+0

@ PalleDue IE9에서 코드가 작동하지 않습니다. – Kira

답변

1

당신이 AJAX 응답에서 바이너리 컨텐츠를 얻는 문제는,이 프로젝트가 정확히 처리하기위한 것입니다 한 충당하기 위해 필요 (Jszip-utils.js에서 _getBinaryFromXHR 호출) getBinaryContent 함수의 일부를 처리하기 위해 이전 xsr에서 표준 xhr 응답 대신 VBScript를 사용하여 xhr에서 데이터를 가져와야합니다 (jszip-utils-ie.js 참조). _getBinaryFromXHR이 재정의 됨).

구조화 된 더 오래된 - 스콜리 식 방법의 또 다른 예는 SO answer입니다 (아직 테스트하지는 않았습니다).