2011-12-22 17 views
5

używam następujący tag HTML, aby załadować API Google Maps:Google Maps ładowanie biblioteki blokuje stronę

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 

jednak blokuje załadunku wszystko, co znajduje się pod nim w HTML aż skrypt zostanie załadowany przez przeglądarka.

Czy istnieje sposób na to, aby ładowanie nie było blokowane?

Odpowiedz

3

Tak, możesz załadować urządzenie asynchronicznie. Sprawdź tę część dokumentacji: http://code.google.com/apis/maps/documentation/javascript/basics.html#Async

+2

Wygląda na to, że sekcja "Asynchronizacja" została usunięta z dokumentacji ... Patrząc na [tę stronę] (https://google-developers.appspot.com/maps/documentation/javascript/examples/map-simple- async), źródło zawiera próbkę asynchronicznego ładowania biblioteki Google Maps. –

4

Ten kod udostępnia funkcję odroczenia, która pobiera adres URL i opcjonalne wywołanie zwrotne. Asynchronicznie ładuje skrypt bez blokowania renderowania strony. Włożyłem zabezpieczenie, aby nie ładowało tego samego skruszenia dwukrotnie, więc możesz naiwnie nazwać to tyle razy, ile chcesz.

defer = (function() { 
    var urls = []; 

    return function (url, callback) { 
     var inc; 

     if (url && urls.indexOf(url) === -1) { 
      inc = document.createElement('script'); 
      inc.async = true; 
      inc.src = url; 
      inc.onload = callback || function() {}; 
      document.getElementsByTagName('head')[0].appendChild(inc); 
     } 
    } 
}()); 

defer('http://maps.google.com/maps/api/js?sensor=false'); 

Działa to dla dowolnego zewnętrznego javascript, który nie zawodzi podczas ładowania asynchronicznego.

+0

Dziękuję za tę wspaniałą wskazówkę, ale wolałbym użyć "oficjalnego" sposobu w tym przypadku. –

+0

To jest to samo. Mój daje ci funkcję, która może ładować dowolne adresy URL zamiast map google. – Munter

+0

@ Munter czy istnieje sytuacja, że ​​asynchroniczne ładowanie kończy się niepowodzeniem w przypadku niektórych skryptów? Zadaję to pytanie w odniesieniu do ostatniej linii w twojej odpowiedzi. –