是什么导致IE8中的Google Maps错误?

时间:2012-05-23 23:46:12

标签: javascript google-maps-api-3 internet-explorer-8

我们正在使用谷歌地图,并确定了一个似乎只在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
});

,错误是:

  

Object不支持此属性或方法

我已经玩过IE开发工具了,如果我用map =替换var x =没有任何错误,所以这让我相信{{1} object是缺少某些属性/方法的罪魁祸首。虽然我不知道map对象来自何处,但我认为它是从map调用加载的。

有谁知道这里发生了什么?

1 个答案:

答案 0 :(得分: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元素的现有全局变量冲突。

您可以通过以下几种方式解决这个问题:

  1. 创建本地var map
  2. 将div的ID从map更改为其他
  3. 如果您必须在全局范围内存在map,请使用window.map =...

    进行设置

    (3b)将变量名称更改为与window.map不冲突的名称,例如myMap = new google.maps.Map(...