В этом примере я делаю два изменения. Один из вариантов совместимости со старыми браузерами, например IE, где вы не можете установить responseType сразу, вам нужно дождаться onloadstart следующим образом:
xhr.onloadstart = function (ev) {
xhr.responseType = "blob";
}
и вам нужно освободить объект URL, созданный после плитка загружена:
tile.getImage().onload = function() {
URL.revokeObjectURL(this.src);
Итак, вот полный пример в том виде, в каком он должен быть написан.
import TileState from 'ol/TileState';
source.setTileLoadFunction(function(tile, src) {
var xhr = new XMLHttpRequest();
xhr.onloadstart = function() {
xhr.responseType = 'blob';
}
xhr.addEventListener('loadend', function (evt) {
var data = this.response;
if (data !== undefined) {
tile.getImage().src = URL.createObjectURL(data);
tile.getImage().onload = function() {
URL.revokeObjectURL(this.src);
}
} else {
tile.setState(TileState.ERROR);
}
});
xhr.addEventListener('error', function () {
tile.setState(TileState.ERROR);
});
xhr.open('GET', src);
xhr.send();
});