diff --git a/examples/webgl-layer-swipe.js b/examples/webgl-layer-swipe.js index 66da0b736c..51af56892c 100644 --- a/examples/webgl-layer-swipe.js +++ b/examples/webgl-layer-swipe.js @@ -17,7 +17,6 @@ const imagery = new TileLayer({ attributions: '© MapTiler ' + '© OpenStreetMap contributors', - crossOrigin: '', maxZoom: 20, }), }); diff --git a/examples/webgl-sea-level.js b/examples/webgl-sea-level.js index bb300d5275..0861bad56b 100644 --- a/examples/webgl-sea-level.js +++ b/examples/webgl-sea-level.js @@ -33,7 +33,6 @@ const layer = new TileLayer({ 'https://api.maptiler.com/tiles/terrain-rgb/{z}/{x}/{y}.png?key=' + key, tileSize: 512, maxZoom: 12, - crossOrigin: 'anonymous', }), style: { variables: { @@ -56,7 +55,6 @@ const map = new Map({ source: new XYZ({ url: 'https://api.maptiler.com/maps/streets/{z}/{x}/{y}.png?key=' + key, attributions: attributions, - crossOrigin: 'anonymous', tileSize: 512, maxZoom: 22, }), diff --git a/examples/webgl-shaded-relief.js b/examples/webgl-shaded-relief.js index 4b8c501f1d..3f4e431621 100644 --- a/examples/webgl-shaded-relief.js +++ b/examples/webgl-shaded-relief.js @@ -50,7 +50,6 @@ const shadedRelief = new TileLayer({ opacity: 0.3, source: new XYZ({ url: 'https://{a-d}.tiles.mapbox.com/v3/aj.sf-dem/{z}/{x}/{y}.png', - crossOrigin: 'anonymous', }), style: { variables: variables, diff --git a/examples/webgl-tile-style.js b/examples/webgl-tile-style.js index 7ba885f855..5e66d60b38 100644 --- a/examples/webgl-tile-style.js +++ b/examples/webgl-tile-style.js @@ -22,7 +22,6 @@ const layer = new TileLayer({ variables: variables, }, source: new XYZ({ - crossOrigin: 'anonymous', // TODO: determine if we can avoid this attributions: attributions, url: 'https://api.maptiler.com/tiles/satellite/{z}/{x}/{y}.jpg?key=' + key, maxZoom: 20, diff --git a/src/ol/webgl/TileTexture.js b/src/ol/webgl/TileTexture.js index a9a5261382..8bba95b877 100644 --- a/src/ol/webgl/TileTexture.js +++ b/src/ol/webgl/TileTexture.js @@ -175,6 +175,12 @@ class TileTexture extends EventTarget { if (this.loaded) { this.uploadTile_(); } else { + if (tile instanceof ImageTile) { + const image = tile.getImage(); + if (image instanceof Image && !image.crossOrigin) { + image.crossOrigin = 'anonymous'; + } + } tile.addEventListener(EventType.CHANGE, this.handleTileChange_); } } diff --git a/test/browser/spec/ol/webgl/TileTexture.test.js b/test/browser/spec/ol/webgl/TileTexture.test.js index e454a3c53c..4b67f4ee96 100644 --- a/test/browser/spec/ol/webgl/TileTexture.test.js +++ b/test/browser/spec/ol/webgl/TileTexture.test.js @@ -77,6 +77,25 @@ describe('ol/webgl/TileTexture', function () { expect(tileTexture.loaded).to.be(true); }); + it('sets anonymous cors mode for image tiles by default', function () { + const tile = new ImageTile([0, 0, 0], TileState.IDLE); + tileTexture.setTile(tile); + const image = tile.getImage(); + expect(image.crossOrigin).to.be('anonymous'); + }); + + it('resepects any existing cors mode', function () { + const tile = new ImageTile( + [0, 0, 0], + TileState.IDLE, + 'https://example.com/tile.png', + 'use-credentials' + ); + tileTexture.setTile(tile); + const image = tile.getImage(); + expect(image.crossOrigin).to.be('use-credentials'); + }); + it('registers and unregisters change listener', function () { const tile = tileTexture.tile; expect(tile.getListeners('change').length).to.be(2);