防止 google 地图使用 turbolinks 加载多次

prevent google maps loaded multiple times with turbolinks

我正在使用 rails 5 和 turbolinks 5,我不想禁用 turbolinks,但它正在多次加载 google 地图 api。

我搜索了很多,找到了很多 rails 4 和 turbolinks 3 的解决方案。我尝试了我看到的所有解决方案,但其中 none 有效。

其中一个看起来很简单:

<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:我现在看到我删除了 google 地图的 api 键,它仍然有效,但我在控制台中看到一条错误消息。

Google Maps API warning: NoApiKeys

如果我在生产中使用 google 没有 api 密钥的地图会有什么问题吗?

我想我已经解决了,看来将 javascript 放在主体的末尾并不是一个好主意,就像我所做的那样。

在 turbolinks 5 文档中据说将它放在 <head>

现在我将脚本放在头上,它似乎工作正常,而且我没有看到 google 地图 api.

的多重加载消息