From 5c0c122a7da425f84b675ed665dc14bd9b7d166e Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Sat, 25 Mar 2017 17:43:51 +0100 Subject: [PATCH] Ensure that the `XMLHttpRequest` is `open`ed 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. --- src/display/dom_utils.js | 13 +++++++------ test/unit/test_utils.js | 12 +++++------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/display/dom_utils.js b/src/display/dom_utils.js index 185303a28..37ea54643 100644 --- a/src/display/dom_utils.js +++ b/src/display/dom_utils.js @@ -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)); }, diff --git a/test/unit/test_utils.js b/test/unit/test_utils.js index 7d37c0e21..bf28eeba8 100644 --- a/test/unit/test_utils.js +++ b/test/unit/test_utils.js @@ -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({