From c515bd2c523c5ce4c3c2b77d6c18b0c25ca7f389 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Mon, 6 Aug 2012 11:47:34 -0500 Subject: [PATCH 1/3] Adds overrideMimeType for IE10 --- web/compatibility.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/web/compatibility.js b/web/compatibility.js index 4b7119c63..2b8fb8c84 100644 --- a/web/compatibility.js +++ b/web/compatibility.js @@ -127,21 +127,24 @@ // No XMLHttpRequest.response ? (function checkXMLHttpRequestResponseCompatibility() { var xhrPrototype = XMLHttpRequest.prototype; + if (!('overrideMimeType' in xhrPrototype)) { + // IE10 might have response, but not overrideMimeType + Object.defineProperty(xhrPrototype, 'overrideMimeType', { + value: function xmlHttpRequestOverrideMimeType(mimeType) {} + }); + } if ('response' in xhrPrototype || 'mozResponseArrayBuffer' in xhrPrototype || 'mozResponse' in xhrPrototype || 'responseArrayBuffer' in xhrPrototype) return; - // IE ? + // IE9 ? if (typeof VBArray !== 'undefined') { Object.defineProperty(xhrPrototype, 'response', { get: function xmlHttpRequestResponseGet() { return new Uint8Array(new VBArray(this.responseBody).toArray()); } }); - Object.defineProperty(xhrPrototype, 'overrideMimeType', { - value: function xmlHttpRequestOverrideMimeType(mimeType) {} - }); return; } From b272cb7d1d692db353eb52c67f91fdf7e4ba4c4a Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Mon, 6 Aug 2012 12:50:47 -0500 Subject: [PATCH 2/3] 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. From 5b583e596a83f26e56d7d8cde0c10c7d8400531d Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Wed, 8 Aug 2012 13:31:15 -0500 Subject: [PATCH 3/3] data.length optimization --- web/compatibility.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/compatibility.js b/web/compatibility.js index 5a16b3d7f..cb2941042 100644 --- a/web/compatibility.js +++ b/web/compatibility.js @@ -141,7 +141,7 @@ var buffer = new ArrayBuffer(data.length); var uint8Array = new Uint8Array(buffer); - for (var i = 0; i < data.length; i++) + for (var i = 0, ii = data.length; i < ii; i++) uint8Array[i] = data.charCodeAt(i); Object.defineProperty(originalReader, 'result', {