我们正在使用谷歌地图,并确定了一个似乎只在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
调用加载的。
有谁知道这里发生了什么?
答案 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元素的现有全局变量冲突。
您可以通过以下几种方式解决这个问题:
var map
map
更改为其他如果您必须在全局范围内存在map
,请使用window.map =...
(3b)将变量名称更改为与window.map
不冲突的名称,例如myMap = new google.maps.Map(...