0

嗨,我的页脚中有这段代码,它在除 IE8 之外的所有浏览器中都可以正常工作,在 IE8 中,它仅在直接页面加载时工作正常,如果我进入域并按 Enter,它就像一个魅力,但如果我点击刷新,我得到一个“对象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> 
4

2 回答 2

0

我仍然不知道出了什么问题,但我做了一些重组和什么时候

$(document).ready(function() {
    google.load("maps", "3",  {
        callback: initialize , 
        other_params: "sensor=false"
    });
});

现在它也适用于 IE8,感谢 4 的帮助!

于 2013-03-08T20:13:59.717 回答
0

这是一个竞赛条件。当信息已经在 IE 的缓存中时,google onload 事件处理程序在 DOM 渲染之前运行(页面 onload 事件)并且地图对象在 DOM 中不存在,因此 document.getDocumentById 找不到它。您需要等待文档加载以及 google 脚本 onload 事件触发。

于 2013-03-08T16:41:08.640 回答