Skip to content

Commit 1d3aba2

Browse files
committed
Merge pull request mozilla#1962 from yurydelendik/ie10-1
Adds overrideMimeType for IE10 and discontinues readAsBinaryString use
2 parents fb46e4d + 5b583e5 commit 1d3aba2

File tree

2 files changed

+45
-13
lines changed

2 files changed

+45
-13
lines changed

web/compatibility.js

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -124,24 +124,63 @@
124124
};
125125
})();
126126

127+
// No readAsArrayBuffer ?
128+
(function checkFileReaderReadAsArrayBuffer() {
129+
if (typeof FileReader === 'undefined')
130+
return; // FileReader is not implemented
131+
var frPrototype = FileReader.prototype;
132+
// Older versions of Firefox might not have readAsArrayBuffer
133+
if ('readAsArrayBuffer' in frPrototype)
134+
return; // readAsArrayBuffer is implemented
135+
Object.defineProperty(frPrototype, 'readAsArrayBuffer', {
136+
value: function fileReaderReadAsArrayBuffer(blob) {
137+
var fileReader = new FileReader();
138+
var originalReader = this;
139+
fileReader.onload = function fileReaderOnload(evt) {
140+
var data = evt.target.result;
141+
var buffer = new ArrayBuffer(data.length);
142+
var uint8Array = new Uint8Array(buffer);
143+
144+
for (var i = 0, ii = data.length; i < ii; i++)
145+
uint8Array[i] = data.charCodeAt(i);
146+
147+
Object.defineProperty(originalReader, 'result', {
148+
value: buffer,
149+
enumerable: true,
150+
writable: false,
151+
configurable: true
152+
});
153+
154+
var event = document.createEvent('HTMLEvents');
155+
event.initEvent('load', false, false);
156+
originalReader.dispatchEvent(event);
157+
};
158+
fileReader.readAsBinaryString(blob);
159+
}
160+
});
161+
})();
162+
127163
// No XMLHttpRequest.response ?
128164
(function checkXMLHttpRequestResponseCompatibility() {
129165
var xhrPrototype = XMLHttpRequest.prototype;
166+
if (!('overrideMimeType' in xhrPrototype)) {
167+
// IE10 might have response, but not overrideMimeType
168+
Object.defineProperty(xhrPrototype, 'overrideMimeType', {
169+
value: function xmlHttpRequestOverrideMimeType(mimeType) {}
170+
});
171+
}
130172
if ('response' in xhrPrototype ||
131173
'mozResponseArrayBuffer' in xhrPrototype ||
132174
'mozResponse' in xhrPrototype ||
133175
'responseArrayBuffer' in xhrPrototype)
134176
return;
135-
// IE ?
177+
// IE9 ?
136178
if (typeof VBArray !== 'undefined') {
137179
Object.defineProperty(xhrPrototype, 'response', {
138180
get: function xmlHttpRequestResponseGet() {
139181
return new Uint8Array(new VBArray(this.responseBody).toArray());
140182
}
141183
});
142-
Object.defineProperty(xhrPrototype, 'overrideMimeType', {
143-
value: function xmlHttpRequestOverrideMimeType(mimeType) {}
144-
});
145184
return;
146185
}
147186

web/viewer.js

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1942,20 +1942,13 @@ window.addEventListener('change', function webViewerChange(evt) {
19421942
// Read the local file into a Uint8Array.
19431943
var fileReader = new FileReader();
19441944
fileReader.onload = function webViewerChangeFileReaderOnload(evt) {
1945-
var data = evt.target.result;
1946-
var buffer = new ArrayBuffer(data.length);
1945+
var buffer = evt.target.result;
19471946
var uint8Array = new Uint8Array(buffer);
1948-
1949-
for (var i = 0; i < data.length; i++)
1950-
uint8Array[i] = data.charCodeAt(i);
1951-
19521947
PDFView.open(uint8Array, 0);
19531948
};
19541949

1955-
// Read as a binary string since "readAsArrayBuffer" is not yet
1956-
// implemented in Firefox.
19571950
var file = files[0];
1958-
fileReader.readAsBinaryString(file);
1951+
fileReader.readAsArrayBuffer(file);
19591952
document.title = file.name;
19601953

19611954
// URL does not reflect proper document location - hiding some icons.

0 commit comments

Comments
 (0)