@@ -681,9 +681,9 @@ export class WebMap extends ol.Observable {
681
681
url : layerInfo . url ,
682
682
wrapX : false ,
683
683
serverType : serverType ,
684
+ crossOrigin : 'anonymous' ,
684
685
// extent: this.baseLayerExtent,
685
- prjCoordSys :{ epsgCode : isBaseLayer ? layerInfo . projection . split ( ':' ) [ 1 ] : this . baseProjection . split ( ':' ) [ 1 ] } ,
686
- tileProxy : this . tileProxy
686
+ prjCoordSys :{ epsgCode : isBaseLayer ? layerInfo . projection . split ( ':' ) [ 1 ] : this . baseProjection . split ( ':' ) [ 1 ] }
687
687
} ;
688
688
if ( layerInfo . visibleScales && layerInfo . visibleScales . length > 0 ) {
689
689
let result = this . getReslutionsFromScales ( layerInfo . visibleScales , 96 , layerInfo . coordUnit ) ;
@@ -695,6 +695,10 @@ export class WebMap extends ol.Observable {
695
695
options . tileGrid = tileGrid ;
696
696
} else {
697
697
options . extent = this . baseLayerExtent ;
698
+ }
699
+ //主机名相同时不添加代理
700
+ if ( layerInfo . url && ! this . isSameDomain ( layerInfo . url ) ) {
701
+ options . tileProxy = this . server + 'apps/viewer/getUrlResource.png?url=' ;
698
702
}
699
703
let source = new ol . source . TileSuperMapRest ( options ) ;
700
704
SecurityManager [ `register${ keyfix } ` ] ( layerInfo . url ) ;
@@ -739,6 +743,7 @@ export class WebMap extends ol.Observable {
739
743
return new ol . source . XYZ ( {
740
744
wrapX : false ,
741
745
projection : projection ,
746
+ crossOrigin : 'anonymous' ,
742
747
tileUrlFunction : function ( coordinates ) {
743
748
let /*quadDigits = '', */ [ z , x , y ] = [ ...coordinates ] ;
744
749
y = y > 0 ? y - 1 : - y - 1 ;
@@ -770,7 +775,7 @@ export class WebMap extends ol.Observable {
770
775
return new ol . source . XYZ ( {
771
776
url : layerInfo . url ,
772
777
wrapX : false ,
773
- crossOrigin : window . location . host
778
+ crossOrigin : 'anonymous'
774
779
} )
775
780
}
776
781
@@ -3411,6 +3416,26 @@ export class WebMap extends ol.Observable {
3411
3416
}
3412
3417
return resolutions ;
3413
3418
}
3419
+ /**
3420
+ * 判断是否同域名(如果是域名,只判断后门两级域名是否相同,第一级忽略),如果是ip地址则需要完全相同。
3421
+ * @param {* } url
3422
+ */
3423
+ isSameDomain ( url ) {
3424
+ let documentUrlArray = url . split ( "://" ) , substring = documentUrlArray [ 1 ] ;
3425
+ let domainIndex = substring . indexOf ( "/" ) , domain = substring . substring ( 0 , domainIndex ) ;
3426
+
3427
+ let documentUrl = document . location . toString ( ) ;
3428
+ let docUrlArray = documentUrl . split ( "://" ) , documentSubstring = docUrlArray [ 1 ] ;
3429
+ let docuDomainIndex = documentSubstring . indexOf ( "/" ) , docDomain = documentSubstring . substring ( 0 , docuDomainIndex ) ;
3430
+
3431
+ if ( domain . indexOf ( ':' ) > - 1 || window . location . port !== "" ) {
3432
+ //说明用的是ip地址,判断完整域名判断
3433
+ return domain === docDomain ;
3434
+ } else {
3435
+ let domainArray = domain . split ( '.' ) , docDomainArray = docDomain . split ( '.' ) ;
3436
+ return domainArray [ 1 ] === docDomainArray [ 1 ] && domainArray [ 2 ] === docDomainArray [ 2 ] ;
3437
+ }
3438
+ }
3414
3439
}
3415
3440
3416
3441
ol . supermap . WebMap = WebMap ;
0 commit comments