我正在构建一个meteor / cordova应用程序,该应用程序由带有Leaflet地图的模板组成,其中tile和图标由mapbox提供(我不确定它是否相关)。
该应用正在使用bevanhunt:leaflet
包,并且在网络浏览器上部署时运行正常。
var map; //outside of the template
Template.map.rendered = function() {
L.Icon.Default.imagePath = 'images';
if (!map) {
map = L.map('map', {
doubleClickZoom: false,
zoomControl: false
});
}
var attributionText = "<a href='http://zencity.io/' target='_blank'>ZenCity © </a>" +
"<a href='https://www.mapbox.com/about/maps/' target='_blank'> Mapbox ©" +
" OpenStreetMap</a>";
L.tileLayer('https://{s}.tiles.mapbox.com/v3/{id}/{z}/{x}/{y}.png', {
maxZoom: 18,
attribution: attributionText,
id: 'someID'
}).addTo(map);
//some code to put makers on the map
}
我应该说标记/弹出窗口显示正常(但是它们的图像不存在;一个小问题,我会尝试处理它),但地图似乎没有初始化。
我是否需要在Template.map.rendered
代码之外创建地图?
我是否需要添加配置以使leaflet / mapbox能够与Cordova / android一起使用?
这里有任何帮助。
答案 0 :(得分:1)
Meteor 1.0.4 introduced App.accessRule
设置为mobile-config.js
。您需要像这样添加tile提供程序的URL:
App.accessRule('https://*.tiles.mapbox.com/*');
基本上,出于安全原因,Cordova应用可能无法连接到他们喜欢的任何网址。这是此白名单的用途。它限制了可以加载哪些URL内容。由于磁贴网址与您的应用网址不同,因此默认情况下会被拒绝。使用App.accessRule
设置可以允许其他网址。 Android和iOS之间支持的域模式略有不同,您可以在the official docs中找到它们。星号(*
)可以(并且必须)用作通配符,这里用于支持动态子域。