5

Googleマップを使用しており、IE8(および場合によっては以下)でのみ発生するように見える問題を特定しました。この機能は、FF、Chrome、IE9で正しく機能します。

エラーが発生するコードは次のとおりです。

google.load("maps", "3.x", { other_params: "sensor=false" });
    var mapdiv = null;
    $(function () {
        mapdiv = document.getElementById("map");
        map = new google.maps.Map( mapdiv, {
            zoom: 1,
            center: new google.maps.LatLng(6, 35),
            disableDefaultUI: true,
            mapTypeId: google.maps.MapTypeId.TERRAIN
        });
        var latlngbounds = new google.maps.LatLngBounds( );

特にこの行では:

map = new google.maps.Map( mapdiv, {
    zoom: 1,
    center: new google.maps.LatLng(6, 35),
    disableDefaultUI: true,
    mapTypeId: google.maps.MapTypeId.TERRAIN
});

エラーは次のとおりです。

オブジェクトはこのプロパティまたはメソッドをサポートしていません

私はIE開発ツールで少し遊んだことがありますが、エラーがmap =ないようなものに置き換えると、オブジェクトが原因であり、プロパティ/メソッドが欠落していると思われます。オブジェクトがどこから来たのかはよくわかりませんが、呼び出しから読み込まれると思います。var x =mapmapgoogle.load

ここで何が起こっているのか誰か知っていますか?

4

1 に答える 1

9

行の場合:

map = new google.maps.Map(mapdiv, { zoom: 1, center: new google.maps.LatLng(6, 35), disableDefaultUI: true, mapTypeId: google.maps.MapTypeId.TERRAIN });

map実行されると、JavaScriptインタープリターは、宣言されている場所を探してスコープチェーンをトラバースし始めます。ローカルで宣言されvar map = ...ていないため、つまり、ローカルスコープで検出されず、最終的にグローバルスコープに追加されます。

あなたの場合、それはあなたのページのIDであるため、mapグローバルスコープですでに定義されています。すべてのブラウザでエラーメッセージは表示されず、新しいオブジェクトに設定されます。何らかの理由で、良いか悪いかにかかわらず、IE8では、DOM要素を参照する既存のグローバル変数と名前が競合するグローバル変数を作成できません。window.mapdivwindow.mapgoogle.maps.Map

これはいくつかの異なる方法で解決できます。

  1. ローカルを作成するvar map
  2. divのIDを別のmapものに変更します
  3. mapグローバルスコープに存在する必要がある場合は、を使用して設定しますwindow.map =...

    (3b)変数名を、競合しない名前に変更しますwindow.map。例:myMap = new google.maps.Map(...

于 2012-05-24T02:13:51.403 に答える