Ensure that the XMLHttpRequest is opened before attempting to set the responseType in the DOMCMapReaderFactory, since IE fails otherwise (issue 8193)

I really cannot understand why this change is necessary, since modern browsers such as Firefox and Chrome work just fine with the old code.
Hence this is patch is yet another "hack" that's needed just because IE apparently cannot just work like you'd expect.

For consistency, the Node factory used in the CMap unit-tests is changed as well.

Fixes 8193.
This commit is contained in:
Jonas Jenwald 2017-03-25 17:43:51 +01:00
parent 3705e5e459
commit 5c0c122a7d
2 changed files with 12 additions and 13 deletions

View File

@ -76,15 +76,17 @@ var DOMCMapReaderFactory = (function DOMCMapReaderFactoryClosure() {
DOMCMapReaderFactory.prototype = {
fetch: function(params) {
if (!params.name) {
var name = params.name;
if (!name) {
return Promise.reject(new Error('CMap name must be specified.'));
}
return new Promise(function (resolve, reject) {
var url = this.baseUrl + params.name;
var url = this.baseUrl + name + (this.isCompressed ? '.bcmap' : '');
var request = new XMLHttpRequest();
request.open('GET', url, true);
if (this.isCompressed) {
url += '.bcmap';
request.responseType = 'arraybuffer';
}
request.onreadystatechange = function () {
@ -105,12 +107,11 @@ var DOMCMapReaderFactory = (function DOMCMapReaderFactoryClosure() {
return;
}
reject(new Error('Unable to load ' +
(this.isCompressed ? 'binary' : '') +
' CMap at: ' + url));
(this.isCompressed ? 'binary ' : '') +
'CMap at: ' + url));
}
}.bind(this);
request.open('GET', url, true);
request.send(null);
}.bind(this));
},

View File

@ -35,21 +35,19 @@ var NodeCMapReaderFactory = (function NodeCMapReaderFactoryClosure() {
NodeCMapReaderFactory.prototype = {
fetch: function(params) {
if (!params.name) {
var name = params.name;
if (!name) {
return Promise.reject(new Error('CMap name must be specified.'));
}
return new Promise(function (resolve, reject) {
var url = this.baseUrl + params.name;
var url = this.baseUrl + name + (this.isCompressed ? '.bcmap' : '');
var fs = require('fs');
if (this.isCompressed) {
url += '.bcmap';
}
fs.readFile(url, function (error, data) {
if (error || !data) {
reject(new Error('Unable to load ' +
(this.isCompressed ? 'binary' : '') +
' CMap at: ' + url));
(this.isCompressed ? 'binary ' : '') +
'CMap at: ' + url));
return;
}
resolve({