2013-03-08 2 views
0

Привет, У меня есть этот код в моем нижнем колонтитуле, он отлично работает во всех браузерах, но IE8, в IE8 он работает только на прямых pageloads, если я вхожу в домен и нажимаю enter , он работает как шарм, но если я удалю обновление, я получаю «Object Expekted», потому что «google.maps» становится пустым объектом, например: JSON.stringify (google.maps) == '[]'Сценарий работает только в первый раз, а не после обновления в IE8

Любой идеал, что может быть неправильным? (Если я удалить кэш и перейти на страницу непосредственно он все еще работает отлично.)

<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

Я бы сказал, что IE8 сломан. Это то же самое со всеми версиями IE или только IE8? Вы пробовали разные настройки совместимости в IE? Каковы настройки кеша для страницы? –

+0

Есть ли document.getElementById (obj.mapId) в потоке страниц до или после этого скрипта? Просто подумайте, что обратный вызов onload может срабатывать, прежде чем объект существует на странице. –

+0

То же самое во всех режимах комп, не знаю о настройках кеша, но это новая установка Проблема шва в том, что «google.maps» имеет значение null после обновления –

ответ

0

Это состояние гонки. Когда информация уже находится в кеше IE, обработчик события onload google запускается до того, как DOM отображается (событие загрузки страницы), а объект карты не существует в DOM, поэтому document.getDocumentById не может его найти. Вам нужно дождаться загрузки документа, а также запустить событие загрузки google.

+0

'jQuery (function() { google.setOnLoadCallback (function() { console.log (JSON. stringify (google.maps)); }); ); ' Остальные выходы" [] "при перезагрузке, но в первый раз в нем содержится много информации. Нужно ли мне ждать дольше? –

0

Я до сих пор не знаю, что было неправильно, но я сделал некоторые реструктуризации и whent с

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

и теперь он работает в IE8, а также, благодаря 4 помощи!

Смежные вопросы