2017-09-08 17 views
0

インターネットエクスプローラを使用してPDFファイルコンテンツをダウンロードしようとしています(C#で書かれたワトリンライブラリを使用した廃止アプリケーションで)。ファイルをダウンロードしようとしているウェブサイトでは、安全なCookieを使用した認証が使用されているため、HTTPClientを使用してCookieを取得してダウンロードすることはできません。だから私はJavascriptからファイルの内容を取得する必要があります。 私はそれを達成することができましたが、IE10 +だけで動作します。 ここで私が使用したコードは次のとおりです。javacriptを使用して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とそれ以前のバージョンでは動作しないということです。私はあなたが問題AJAX応答からバイナリコンテンツを取得する必要があり、それを理解するように、このプロジェクトはまさにそれに対処することを意図する少なくとも

+0

あなたの質問は何ですか? –

+0

IE9は本当に必要条件ですか? –

+0

@PalleDue IE9でコードが動作しません。 – Kira

答えて

1

IE8とIE9をカバーする必要があります。https://github.com/Stuk/jszip-utils

あなたはXHRで見ることができるように以前のIEのgetBinaryContent関数(jszip-utils.jsの_getBinaryFromXHR呼び出し)で、xhrから標準のxhr応答ではなくVBScriptによってデータを取得する必要があります(jszip-utils-ie.jsを参照してください)。 _getBinaryFromXHRはオーバーライドされます)。

同じアプローチのもう一つの例は、これより古いsuchooley wayがこのSO answerにあります(ただしこれはテストされていません)。

関連する問題