7

当我在脚本标记中加载http://maps.google.com/maps/api/js?sensor=false时,Chrome,Safari,Firefox和IE9中的所有内容都能正常工作。IE8中的Google地图API加载失败(“google”未定义)

然而,当我看到在IE9 在兼容模式(或者,有人告诉我,在IE8)地图不加载和“‘谷歌’是未定义的”被记录在控制台中。

下面是相关的代码,与被触发带有注释标识错误的行:

<html> 
<head> 
<title>Test Map</title> 
<script type="application/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
</head> 
<body> 
<div id="map_canvas"></div> 
<script type="text/javascript"> 
var lat=37.763154; 
var lon=-122.457941; 
var initialZoom=17; 
var mapTypeId = 'Custom Map'; 
var mapStyle = [{featureType:"landscape", elementType:"all", stylers:[{hue:"#dae6c3"},{saturation:16},{lightness:-7}]}, 
       {featureType:"road", elementType:"geometry", stylers:[{hue:"#ffffff"},{saturation:-100},{lightness:100}]}]; 

//**The error is tripped in this next line, again only in IE9 compatibility mode or IE8*  
var styledMap = new google.maps.StyledMapType(mapStyle); 

var mapType = new google.maps.ImageMapType({ 
    tileSize: new google.maps.Size(256,256), 
    getTileUrl: function(coord,zoom) { 
     return "img/tiles/"+zoom+"/"+coord.x+"/"+coord.y+".png"; 
    } 
}); 
var map = new google.maps.Map(document.getElementById("map_canvas"), 
     {center:new google.maps.LatLng(lat,lon), 
     mapTypeId:google.maps.MapTypeId.ROADMAP, 
     zoom:initialZoom, 
     mapTypeControl:false}); 
map.overlayMapTypes.insertAt(0, mapType); 

map.mapTypes.set(mapTypeId, styledMap); 
map.setMapTypeId(mapTypeId); 
</script> 
</body> 
</html> 

所以,出于某种原因,只有在IE9 +兼容模式和IE8,脚本标记,用于指定http://maps.google.com/maps/api/js?sensor=false未在正文中的后续嵌入脚本之前加载和/或执行。

其他人能够复制吗?我该如何纠正这个问题?

+0

你在菲德勒看到什么? – SLaks 2011-06-13 19:10:18

+0

我不认为它是你的错。它只是IE的兼容模式,它阻止了活动脚本。 (可能...) – 2011-06-13 19:51:55

回答

3

这个问题显然是因为IE 8没有注意“application/javascript”。我在<head>部分的<script>标记中将其更改为“text/javascript”,现在我的代码可以工作。当然,如果我将它改回“application/javascript”,那么它就停止工作。

1

IE正在下载,然后尝试在本地机器上执行JS,而其他浏览器只是将其作为文本文件打开。你可以从IE浏览器下载任何东西下载到的默认情况下的JS。

编辑:根据更新,看到这个小提琴看到一种工作修复。 http://jsfiddle.net/h6rc3/

+0

哦,我现在看到了。我感到很傻。 (显然,我并没有使用IE。)好的,所以这不是问题。我将不得不更新我的问题。 – Trott 2011-06-13 19:22:32

+0

@Trott:不用担心,我不得不去找IE自己:) – 2011-06-13 19:25:56

1

确保IE不处于脱机模式。听起来像浏览器没有连接到互联网。

+0

绝对不是在离线模式下,但这是一个很好的猜测。当我在IE9中关闭兼容模式时,它可以正常工作。打开它,没有地图,我在控制台中得到“'google'未定义”。这只是兼容模式(或者,根据我的用户,使用IE8)触发它。 – Trott 2011-06-13 19:19:18

+0

感谢@brenjt,您的提示解决了我的问题。 – Jaikrat 2014-07-30 12:46:38

1

我的谷歌地图v3站点停止工作在IE 9兼容性视图模式下,IE 8和IE7。

原因:使用jQuery的java脚本错误仅在使用IE F12开发人员工具检查脚本时发生。这是违规行。该错误缺少来自令牌类的单引号。

$('<tr>', { 'class': country }).appendTo(tableSelector).append(h1).append(h2); 

起初我追求虚假的领先优势,认为它是另外一个关键的= http://maps.googleapis.com/maps/api/js?key=MY_KEY_FROM_API_CONSOLE&sensor=false

的教训是:使用的工具,萤火虫或IE工具或什么的,检查您的JavaScript介绍的问题。

2

一个猜测是,你的网页是通过https工作的,而来自Google的请求是http。 将Google请求转换为https,错误将消失。 这为我工作。

请参阅:Possible solution