嗨我在我的页脚中有这个代码,它在所有浏览器中工作得很好但是IE8,在IE8中它仅在直接页面加载时很好,如果我进入域并点击输入,它就像一个魅力,但如果我点击刷新,我得到一个“对象Expekted”,因为“google.maps”变成一个空对象,例如:JSON.stringify(google.maps)=='[]'
任何想法应该是什么错误? (如果我删除缓存并直接转到页面,它仍然可以正常工作。)
<script type='text/javascript' src='http://www.google.com/jsapi?ver=3.2.1'></script>
<script type="text/javascript">
google.setOnLoadCallback(function(){
jQuery( ".all-map" ).each(function( index ) {
var obj = jQuery.parseJSON(jQuery(this).val());
var allMap = new google.maps.Map(document.getElementById(obj.mapId), {
zoom: obj.zoom,
center: new google.maps.LatLng(obj.centerLat, obj.centerLong),
mapTypeId: google.maps.MapTypeId.SATELLITE
}
);
var locations = eval(obj.locations);
var infowindow = new google.maps.InfoWindow();
var marker, i;
for (i = 0; i < locations.length; i++) {
marker = new google.maps.Marker({
position: new google.maps.LatLng(locations[i][1], locations[i][2]),
map: allMap
});
google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
jQuery('#'+obj.mapId).parent().siblings().eq(i).click();
infowindow.setContent(locations[i][0]);
infowindow.open(allMap, marker);
}
})(marker, i));
}
});
});
</script>
答案 0 :(得分:0)
这是竞争条件。当信息已经在IE的缓存中时,google onload事件处理程序在呈现DOM之前运行(页面onload事件)并且DOM中不存在map对象,因此document.getDocumentById找不到它。您需要等待加载文档以及要触发的Google脚本onload事件。
答案 1 :(得分:0)
我仍然不知道出了什么问题,但我做了一些重组,并且
$(document).ready(function() {
google.load("maps", "3", {
callback: initialize ,
other_params: "sensor=false"
});
});
现在它也适用于IE8,感谢4的帮助!