2012-05-23 10 views
5

Wir verwenden Google Maps und haben ein Problem festgestellt, das nur in IE8 (und möglicherweise darunter) auftritt. Die Funktionalität funktioniert in FF, Chrome, IE9 korrekt.Was verursacht einen Google Maps-Fehler in IE8?

Der Code, der Fehler passiert ist, um:

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(); 

Insbesondere auf dieser Linie:

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

und der Fehler ist:

Objekt nicht unterstützt diese Eigenschaft oder Methode

Ich hatte ein bisschen ein Spiel mit den IE-Dev-Tools und wenn ich map = durch etwas wie var x = ersetzen, gibt es keinen Fehler, so führt dies zu der Annahme, dass das map Objekt der Schuldige ist, der eine Eigenschaft/Methode fehlt . Obwohl ich nicht wirklich weiß, wo das map Objekt herkommt, nehme ich an, dass es vom google.load Anruf geladen wird.

Weiß jemand, was hier vor sich geht?

+2

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

Antwort

9

Wenn die Zeile:

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

wird der Interpreter den Umfang Kette beginnt JavaScript ausgeführt durchqueren bis zum, wo map deklariert wird. Da es nicht lokal deklariert ist, d. H. var map = ..., findet es es nicht in Ihrem lokalen Bereich, und es wird schließlich dem globalen Bereich hinzugefügt.

In Ihrem Fall map ist bereits im globalen Gültigkeitsbereich als window.map definiert, weil es die ID eines div auf Ihrer Seite ist. In allen Browsern wird keine Fehlermeldung angezeigt. window.map ist auf ein neues Objekt google.maps.Map eingestellt. Aus irgendeinem Grund, ob gut oder schlecht, lässt IE8 Sie keine globale Variable erstellen, deren Name in Konflikt mit einer vorhandenen globalen Variable steht, die auf ein DOM-Element verweist.

Man könnte dies mehrere verschiedene Arten lösen:

  1. Erstellen Sie eine lokale var map
  2. Ändern Sie die ID Ihres div von map auf etwas anderes
  3. Wenn Sie map existieren in globalen Bereich haben müssen , setzen Sie es mit window.map =...

    (3b) Ändern Sie den Variablennamen zu einem, der nicht mitKonflikt, z.B. myMap = new google.maps.Map(...

Verwandte Themen