1

私のコードでは IE8 でのみ発生する問題に苦労しているため、親切に助けを求めます。http://www.europeontrack.com/test.htmlで問題を説明するデモ ページを見ることができます。お気づきのとおり、Firefox、Chrome、Safari では正常に動作しますが、IE8 では、openlayers.js の 684 行目、178 文字目で Javascript エラー「無効な引数」がトリガーされます。

このページではまず、openlayers マップ オブジェクトを初期化し、後でポイントを描画するために使用する空の cityLayer ベクター レイヤーを宣言します。リンク「show city list」は、 http: //www.europeontrack.com/cityList.html を非同期的に呼び出し、それを DOM に挿入します。cityList.html は、いくつかの都市の名前、緯度、経度が格納される配列を宣言します。この配列は、次のように test.html で宣言されている showCities() 関数に引数として渡されます。

function showCities(cities,layer) {
    var pointFeatures = [] ;
    for ( i = 0 ; i < cities.length ; i++) {
        pointFeatures[i] = new OpenLayers.Feature.Vector(
            newOpenLayers.Geometry.Point(cities[i]['long'],
                cities[i]'lat']).transform(
                map.displayProjection,map.baseLayer.projection));
        pointFeatures[i].attributes = { label: cities[i]['label'] };
    }
    cityLayer.addFeatures(pointFeatures);
    return false ;
}

IE8 では、'cities' 配列に含まれる最初の都市のみが描画され、ブラウザは「無効な引数」エラーをスローします。私のソースコードを見ることができます。最小限に抑えたと思います。この問題をトラブルシューティングしようとして、この時点で立ち往生しています。よろしくお願いいたします。

ロテール

4

2 に答える 2

0

私はそれを見てきましたが、パブリック OL ビルドでエラーを再現できます。しかし、OL 2.9.1 の私自身のコピーを使用すると、IE と FF で動作します。

ダウンロードしたファイルに小さな変更を加えましたが、ポップアップ クラスでのみ行ったので、コードには影響しません。OpenLayers 2.9.1 をダウンロードして、アプリがそのバージョンで動作するかどうかを確認してください。または、デバッグ バージョンの OL (非圧縮) から始めて、エラーが発生するコード行を確認してください。縮小されたコードを見ない場合は、はるかに簡単です。:-)

于 2011-03-15T11:27:50.267 に答える
0

調査していただきありがとうございます - しかし、IE8 を除くほとんどのブラウザーに影響を与えず、実際に問題の原因となった、スタイルマップの定義で不注意な間違いを犯したと言うのは恥ずかしいことです。この間ずっと、間違った場所を見て、デバッグしようとしていました。

これが私の間違いでした:

styleMap = new OpenLayers.StyleMap({
    'default':{
        strokeColor: "#FFFFFF",
        strokeOpacity: 1,
        strokeWidth: 2,
        fillColor: "#852C71",
        fillOpacity: 1,
        pointRadius: 4,
        pointerEvents: "visiblePainted",
        label : "${label}",                   
        fontColor: "#000000",
        fontSize: "10px",
        fontFamily: "Verdana",
        fontWeight: "bold",
        labelAlign: **"${align}",**
        labelXOffset: **"${xOffset}",**
        labelYOffset: "-10"
    }
});

ベクターレイヤーにフィーチャを追加するときに値を渡さなかった styleMap で 2 つの変数 (${align}、${xOffset}) を指定しました。これにより IE が壊れましたが、他のブラウザはそれを無視していました。これらの変数を固定値に置き換えて、IE8 の問題を解決しました。私の側のこのばかげた間違いについてお詫び申し上げます。調べてくれてありがとう。

ロテール

于 2011-03-16T15:20:20.317 に答える