是什么导致了IE8中的谷歌地图错误

What is causing a Google Maps error in IE8?

本文关键字:谷歌地图 错误 IE8 是什么      更新时间:2023-09-26

我们正在使用谷歌地图,并发现了一个似乎只发生在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 开发工具进行了一些尝试,如果我用类似 var x = 的东西替换map =没有任何错误,所以这让我相信map对象是缺少某些属性/方法的罪魁祸首。虽然我真的不知道map对象来自哪里,但我认为它是从google.load调用加载的。

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

当行:

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(...