1

我有一个小的弹出窗口,我正在加载用户点击页面上的链接。但大约有一半的时间,我在 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);
}
4

1 回答 1

1

可能是您在带有 OSM 构造函数的 js 文件完全加载之前执行了代码。如果您在执行代码之前不等待 document.onReady 事件,这很常见。第一次加载页面时,会从服务器请求 js 文件,加载需要十分之几秒,这使得在页面代码中使用它为时已晚。第二次缓存js代码,让页面代码可以访问。

你什么时候调用你的 initialize() 函数?

于 2011-03-21T23:33:15.113 回答