2012-05-23 8 views
5

Googleマップを使用しており、IE8(および場合によってはそれ以下)で発生するような問題が特定されています。この機能はFF、Chrome、IE9で正しく動作します。エラーの周り起こるIE8でGoogle Mapsエラーの原因は何ですか?

コードである:この行に特に

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 =に置き換えてもエラーはありませんので、mapオブジェクトはいくつかのプロパティ/メソッドが欠けていると思います。 mapオブジェクトがどこから来るのかは分かりませんが、google.loadコールからロードされると仮定します。

ここで何が起こっているのか分かりませんか?

+2

参照:http://stackoverflow.com/questions/9158238/why-js-function-name-conflicts-with-element-id –

答えて

9

ときライン:

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

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

mapは、window.mapとして既にグローバルスコープに定義されています。これは、お客様のページにdivというIDがあるためです。すべてのブラウザでエラーメッセージが表示されない場合、window.mapは新しいgoogle.maps.Mapオブジェクトに設定されています。なんらかの理由で、IE8では、DOM要素を参照する既存のグローバル変数と名前が矛盾するグローバル変数を作成することはできません。あなたはこのいくつかの方法を解決することができ

:あなたがグローバルスコープでmapが存在していなければならない場合

  1. mapから
  2. 何か他のものにあなたのdivのIDを変更

  3. var map地元の作成それを使用して設定する window.map =...

    (3b)変数名をと矛盾しない名前に変更します、例えば、 myMap = new google.maps.Map(...

関連する問題