From b272cb7d1d692db353eb52c67f91fdf7e4ba4c4a Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Mon, 6 Aug 2012 12:50:47 -0500 Subject: [PATCH] Using readAsArrayBuffer --- web/compatibility.js | 36 ++++++++++++++++++++++++++++++++++++ web/viewer.js | 11 ++--------- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/web/compatibility.js b/web/compatibility.js index 2b8fb8c84..5a16b3d7f 100644 --- a/web/compatibility.js +++ b/web/compatibility.js @@ -124,6 +124,42 @@ }; })(); +// No readAsArrayBuffer ? +(function checkFileReaderReadAsArrayBuffer() { + if (typeof FileReader === 'undefined') + return; // FileReader is not implemented + var frPrototype = FileReader.prototype; + // Older versions of Firefox might not have readAsArrayBuffer + if ('readAsArrayBuffer' in frPrototype) + return; // readAsArrayBuffer is implemented + Object.defineProperty(frPrototype, 'readAsArrayBuffer', { + value: function fileReaderReadAsArrayBuffer(blob) { + var fileReader = new FileReader(); + var originalReader = this; + fileReader.onload = function fileReaderOnload(evt) { + var data = evt.target.result; + var buffer = new ArrayBuffer(data.length); + var uint8Array = new Uint8Array(buffer); + + for (var i = 0; i < data.length; i++) + uint8Array[i] = data.charCodeAt(i); + + Object.defineProperty(originalReader, 'result', { + value: buffer, + enumerable: true, + writable: false, + configurable: true + }); + + var event = document.createEvent('HTMLEvents'); + event.initEvent('load', false, false); + originalReader.dispatchEvent(event); + }; + fileReader.readAsBinaryString(blob); + } + }); +})(); + // No XMLHttpRequest.response ? (function checkXMLHttpRequestResponseCompatibility() { var xhrPrototype = XMLHttpRequest.prototype; diff --git a/web/viewer.js b/web/viewer.js index 40102852b..324f229cb 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -1944,20 +1944,13 @@ window.addEventListener('change', function webViewerChange(evt) { // Read the local file into a Uint8Array. var fileReader = new FileReader(); fileReader.onload = function webViewerChangeFileReaderOnload(evt) { - var data = evt.target.result; - var buffer = new ArrayBuffer(data.length); + var buffer = evt.target.result; var uint8Array = new Uint8Array(buffer); - - for (var i = 0; i < data.length; i++) - uint8Array[i] = data.charCodeAt(i); - PDFView.open(uint8Array, 0); }; - // Read as a binary string since "readAsArrayBuffer" is not yet - // implemented in Firefox. var file = files[0]; - fileReader.readAsBinaryString(file); + fileReader.readAsArrayBuffer(file); document.title = file.name; // URL does not reflect proper document location - hiding some icons.