L.TileLayer如何加载瓷砖,为什么';它不会抛出CORS错误吗?

L.TileLayer如何加载瓷砖,为什么';它不会抛出CORS错误吗?,cors,leaflet,dronedeploy,Cors,Leaflet,Dronedeploy,我提供的URL在执行时会给我cors问题(访问被拒绝),如果通过MopleJS的tilelayer函数访问,则不会给我cors问题。只是想了解tileLayer的实现是如何完成的 我知道cors问题(拒绝访问)出现在origin未被列入白名单的情况下,但在这种情况下tileLayer也应该给我拒绝访问的问题,但它能够在地图中加载瓷砖 我参考了下面的代码来理解实现,但没有发现它是如何以不同的方式处理cors问题的。感谢您的帮助。 TL;DR:传单只会操纵DOM,这样做不会引发CORS错误 传单创

我提供的URL在执行时会给我cors问题(访问被拒绝),如果通过MopleJS的tilelayer函数访问,则不会给我cors问题。只是想了解tileLayer的实现是如何完成的

我知道cors问题(拒绝访问)出现在origin未被列入白名单的情况下,但在这种情况下tileLayer也应该给我拒绝访问的问题,但它能够在地图中加载瓷砖

我参考了下面的代码来理解实现,但没有发现它是如何以不同的方式处理cors问题的。感谢您的帮助。

TL;DR:传单只会操纵DOM,这样做不会引发CORS错误


传单创建设置了
属性,使元素看起来像

然后,
L.GridLayer
的功能将
元素添加到DOM中:

然后有一点神奇的是将
放置在一些容器元素中,使其保持在正确的位置,并在加载图像时重置其CSS类

传单操纵DOM。传单的作用是通过javascript访问图像信息。换句话说:传单不使用nor

因此,在加载资源时,代码不会抛出与CORS相关的错误,因为只有通过
XmlHttpRequest
fetch
请求资源时才会发生这种情况

但是,如果您试图访问JS代码中的图像数据,您将发现CORS错误(通常通过
canvas
功能完成,请参见示例)。但在一个基本场景中,whis不会发生

还要注意的是,如果加载失败(由于HTTP错误或其他原因),则为。这反过来会使
L.TileLayer
s起火。如果您对查看磁贴加载错误感兴趣,那么可能需要使用事件处理程序

var tile = document.createElement('img');
tile.src = this.getTileUrl(coords);
container.appendChild(tile);