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 ファイルが要求されます。ロードに 10 分の 1 秒かかるため、ページ コードで使用するには遅すぎます。2 回目に js コードがキャッシュされ、ページ コードからアクセスできるようになります。

initialize() 関数を呼び出すのはいつですか?

于 2011-03-21T23:33:15.113 に答える