2011-12-22 4 views
5

Я использую следующий HTML-тег для загрузки API Google Maps:Google Maps библиотеки загрузка блокирует страницу

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

Однако, он блокирует погрузочную всё, что ниже его в HTML, пока сценарий не загружаются браузера.

Есть ли способ сделать эту загрузку неблокирующей?

ответ

3

Да, вы можете загрузить его асинхронно. Посмотрите эту часть документов: http://code.google.com/apis/maps/documentation/javascript/basics.html#Async

+2

Раздел «Async», кажется, удален из документации ... Глядя на [эту страницу] (https://google-developers.appspot.com/maps/documentation/javascript/examples/map-simple- async), источник содержит образец асинхронной загрузки библиотеки Google Maps –

4

Этот код дает вам функцию отсрочки, которая берет URL-адрес и дополнительный обратный вызов. Он асинхронно загружает ваш скрипт без блокировки отображения страницы. Я поставил защиту, поэтому он не будет загружать один и тот же scritp дважды, так что вы можете наивно называть его столько раз, сколько захотите.

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'); 

Это работает для любого внешнего javascript, который не прерывается при загрузке async.

+0

Спасибо за этот замечательный отзыв, но я бы предпочел использовать «официальный» способ в этом случае –

+0

Это то же самое. Mine просто дает вам функцию, которая может загружать произвольные URL-адреса, а не карты Google. – Munter

+0

@Munter там какая-либо ситуация, что асинхронная загрузка не работает для некоторых скриптов? Я задаю этот вопрос в отношении вашей последней строки в вашем ответе. –