【问题标题】:prevent google maps loaded multiple times with turbolinks防止使用 turbolinks 多次加载谷歌地图
【发布时间】:2023-09-12 04:35:01
【问题描述】:

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

我进行了很多搜索,找到了很多适用于 rails 4 和 turbolinks 3 的解决方案。我尝试了所有我看到的解决方案,但都没有奏效。

其中一个看起来很简单:

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

但仍会多次加载谷歌地图。

其中一个是:

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

但是这个有时在地图初始化之前没有加载谷歌地图,有时它会返回多次加载的错误。

我阅读了很多,有很多问题都在问同样的问题,但我没有找到任何可行的解决方案。

PD:我现在看到我删除了谷歌地图的 api 密钥,它仍然可以工作,但是我在控制台中看到了一条错误消息。

Google Maps API warning: NoApiKeys

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

【问题讨论】:

  • 我在这些请求中看不到密钥。现在需要密钥,它可能会工作(如果您的网站是“祖父”以进行无密钥访问),但它也可能随时停止工作(如果谷歌决定更改他们的祖父政策)
  • 我有 api 密钥并且我使用它,但我删除了它,我看到它继续工作。这就是我问的原因;)感谢您的回答。

标签: javascript google-maps ruby-on-rails-5 turbolinks-5


【解决方案1】:

我想我解决了它,似乎像我一样将javascripts放在正文的末尾不是一个好主意。

据说在 turbolinks 5 文档中将其放在 &lt;head&gt; 上。

现在我将脚本放在头上,它似乎可以正常工作,而且我没有看到谷歌地图 api 的多个加载消息。

【讨论】:

  • 你把哪个脚本变体放在了头上?