запретить многократную загрузку карт Google с помощью turbolinks

#javascript #google-maps #ruby-on-rails-5 #turbolinks-5

#javascript #google-карты #ruby-on-rails-5 #turbolinks-5

Вопрос:

Я использую rails 5 и turbolinks 5, я не хочу отключать turbolinks, но он загружает API карт Google несколько раз.

Я много искал и нашел множество решений для rails 4 и turbolinks 3. Я перепробовал все решения, которые видел, но ни одно из них не сработало.

Один из них выглядит просто:

 <script src="http://maps.googleapis.com/maps/api/js?v=3.exp" type="text/javascript" data-turbolinks-eval="always"></script>
  

но все равно загружает карты Google несколько раз.

Еще один из них был:

 <script src="http://maps.googleapis.com/maps/api/js?v=3.exp" type="text/javascript" data-turbolinks-track="reload"></script>
  

но ни один из них не работает.

Многообещающим решением было:

 var ready;
ready = function() {
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = 'http://maps.googleapis.com/maps/api/js?v=3.exp';
    document.body.appendChild(script);
};

$(document).ready(ready);
$(document).on('turbolinks:load', ready);
  

но этот иногда не загружает карты Google до инициализации карты, а иногда возвращает ошибку при нескольких загрузках.

Я много читаю, есть много вопросов, задающих то же самое, но я не нахожу рабочего решения ни в одном из них.

PD: Теперь я вижу, что я удалил ключ api Google maps, он все еще работает, но я прочитал сообщение об ошибке в консоли.

 Google Maps API warning: NoApiKeys
  

Будут ли какие-либо проблемы, если я использую карты Google без ключа api в производстве?

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

1. Я не вижу ключа в этих запросах. Теперь требуются ключи, это может сработать (если ваш сайт «дедушкин» для доступа без ключа), но он также может перестать работать в любое время (если Google решит изменить свою политику дедушки)

2. У меня есть ключ api, и я использую его, но я удалил его и увидел, что он продолжает работать. Вот почему я спросил 😉 Спасибо за ответ.

Ответ №1:

Я думаю, что я решил это, кажется, что не стоит размещать javascripts в конце тела, как я это делал.

В документации turbolinks 5 говорится, что он помещается на <head> .

Теперь я поместил скрипты в начало, и, похоже, он работает без проблем, и я не вижу сообщений о нескольких загрузках для API карт Google.

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

1. какой вариант сценария вы поместили в head?