我有一个小的弹出窗口,我在用户点击页面上的链接时加载。但大约一半的时间,我在firebug的console.log中得到“OpenLayers.Layer.OSM.Mapnik不是构造函数”。如果我关闭弹出窗口(这是一个jqueryui对话框),然后再次单击该链接,它可能不会出错。但如果我关闭它并再次打开它我再次得到错误。这很奇怪。
如果我完全刷新页面,我会在第一次点击时收到错误但关闭然后我会得到地图。
在我错过的较小窗口中加载地图有什么秘密吗?我不会在不同页面上的地图全屏版本中收到错误...
以下是加载地图的代码:
var map = undefined,
popup = undefined;
function initialize (){
var center_lat = "39.828175";
var center_long = "-98.579500";
OpenLayers.ImgPath = "/images/openlayers/";
map = new OpenLayers.Map ("map", {
controls:[
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoomBar()],
});
var scalebar = new OpenLayers.Control.ScaleBar({displaySystem: "english",align: "right"});// this is an external library that is loaded as a js file and works great on the full screen map too....
map.addControl(scalebar);
layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Open Street Maps");
map.addLayer(layerMapnik);
lonLat = OLL(center_long, center_lat);
map.setCenter (lonLat, 13);
}
答案 0 :(得分:0)
可能是在完全加载了OSM构造函数的js文件之前执行代码。如果您在执行代码之前不等待document.onReady事件,这很常见。第一次加载页面时,从服务器请求js文件,加载几十分之一秒,使得在页面代码中使用时间太晚。第二次缓存js代码,使其可以访问页面代码。
什么时候调用initialize()函数?