Есть ли какой-либо способ вызвать функцию обратного вызова Google initMap вне URL Google API?

#javascript #api #google-maps

#javascript #API #google-карты

Вопрос:

Я использую Google map API, который содержит функцию обратного вызова initMap, мне нужно вызвать эту функцию вне URL Google map API, например, я использую:

 <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEYamp;libraries=placesamp;callback=initMap"></script>
  

Мне нужно удалить последнюю часть строки запроса amp;callback=initMap но когда я удаляю Google map, это не работает.

Проблема в том, что я хочу использовать этот же Google map api для всего, что связано с Google api, следовательно, в некоторых API нет метода initMap, поэтому я хочу вызвать этот метод отдельно, возможно ли это.

Ответ №1:

Вам не обязательно вызывать initMap функцию асинхронно.

Изменение (похоже, в нем отсутствует «асинхронная отсрочка»):

 <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEYamp;libraries=placesamp;callback=initMap"></script>
  

Для:

 <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEYamp;libraries=places"></script>
  

Затем вызовите функцию initMap после того, как div карты будет отображен в DOM.

Примечание: есть причина, по которой Google изменил все свои примеры для асинхронной загрузки API (скорость загрузки страницы), все их примеры изначально были выполнены с помощью функции onload.

фрагмент кода:

 function initialize() {
  var map = new google.maps.Map(
    document.getElementById("map_canvas"), {
      center: new google.maps.LatLng(37.4419, -122.1419),
      zoom: 13,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    });

}
google.maps.event.addDomListener(window, "load", initialize);  
 html,
body,
#map_canvas {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding: 0px
}  
 <script src="https://maps.googleapis.com/maps/api/js?libraries=placesamp;key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>
<div id="map_canvas"></div>  

Комментарии:

1. Ваш тот же пример не работает с моей стороны, я использовал точно такой же код, не могли бы вы, пожалуйста, создать его на JSFiddle, если вы не возражаете 🙂

Ответ №2:

Вы можете вызвать initMap после задержки, setTimeout(initMap, 500);

Комментарии:

1. Я так не думаю, вы полагаетесь на тот факт, что скрипт Google maps api загружается за 500 мс, что может произойти, а может и не произойти (в зависимости от скорости соединения пользователей).