谷歌地图 JavaScript API RefererNotAllowedMapError

我们正在尝试为我们的一个客户开发一个地理位置应用程序,我们希望首先在我们自己的领域测试它。

我们已经签署了谷歌地图 JavaScript API,我们有一个有效的浏览器密钥和我们的域名, www.grupocamaleon.com ,已被授权使用该密钥。

但是我们甚至不能做出最简单的例子来运行而没有错误。

我们有,在我们的领域和我们的关键,以下演示:

(1) http://www.grupocamaleon.com/boceto/aerial-simple.html

但是它不工作,Firebug 控制台说:

“ Google Maps API 错误: Google Maps API 错误: RefererNotAllowedMapError (链接到 RefererNotAllowedMapError 上的 Google 文档)您的网站 URL 将被授权: (1)”

我的证书页面缺少添加引用接受的可能性,所以包括添加引用的解决方案现在是不可能的。

我的证书页面:

enter image description here

为什么我们会得到这个错误? 我们怎样才能修复它?

282682 次浏览

根据谷歌文档中的“ https://developers.google.com/map/document/javascript/error-message”rel = “ noReferrer”> 之所以会发生这种情况,是因为在使用 Google Maps API 的 url上,它是 list of allowed referrers中的 not registered

编辑:

来自 谷歌文档

指定域的所有子域也被授权。

如果 http://example.com被授权,那么 http://www.example.com也被授权。反之则不然: 如果 http://www.example.com被授权,那么 http://example.com就不一定被授权

因此,请配置 http://testdomain.com域,然后您的 http://www.testdomain.com将开始工作。

根据文档,“ RefererNotAllowedMapError”意味着

The current URL loading the Google Maps JavaScript API has not been 添加到允许的引用者列表中。请检查引用者 在 GoogleDevelopers 控制台上设置您的 API 键。

我为自己的个人/工作使用设置了 Google Maps Embed API,到目前为止还没有指定任何 HTTP 引用。我没有记录错误。你的设置必须让谷歌认为你访问的网址是不注册或允许的。

enter image description here

你可以显示你的 api 认证页面的截图,但是你必须点击“ Browser key 1”然后从那里添加引用。

enter image description here

接受来自这些 HTTP 引用者(网站)的请求

写入本地主机目录路径

我知道这是一个老问题,已经有几个答案,但我有同样的问题,对我来说,问题是我遵循的例子提供的 console.developers.google.com ,并输入我的域名在格式 *.domain.tld/*。这根本不起作用,我尝试添加各种变体到这样的 domain.tlddomain.tld/**.domain.tld等。

对我来说,解决这个问题的是添加实际的 规定也; http://domain.tld/*是唯一的一个我需要它在我的网站上工作。如果要切换到 HTTPS,我想我需要添加 https://domain.tld/*

更新: Google 现在终于更新了占位符以包含 http:

Google Maps API referrer input field

检查站点上的声明。要加载 GoogleMaps JavaScriptAPI,使用如下脚本标记

<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap"
async defer></script>

我在我的 Wordpress 站点的 function. php 文件中使用了这个声明

wp_enqueue_script("google-maps-v3", "//maps.google.com/maps/api/js?key=YOUR_API_KEY", false, array(), false, true);

我已经设置了这种格式的 API 键,它的工作正常

http://my-domain-name(without www).com/*

这个声明不起作用

*.my-domain-name.com/*

只要提醒一下,如果你只是改变它,它可能需要5分钟的设置生效。

我尝试了许多引用变体,也等了5分钟,直到我意识到 Google 在表单字段中填充的示例是有缺陷的。它们表明:

*.example.com/*

但是,这只有当你有 subdomain.www.在你的域名前面。下面的内容对我来说立刻奏效了(省略了 Google 示例中的前导句) :

*example.com/*

取消限制(无)对我来说很有效。

用于更深的嵌套页

如果在某个文件夹中有项目(例如,嵌套页)

你可以输入这个

http://yourdomain.com/*/*

重要的部分是 /*/*/*,这取决于你需要走多远

看来,*将不匹配 /或进入更深的路径。

这将给予您完整的域访问权限,除非您有更深的嵌套。

通过使用谷歌的这条建议,我终于让我的工作起作用了: (https://support.google.com/webmasters/answer/35179)

下面是我们对域和站点的定义。这些定义是特定于搜索控制台验证的:

http://example.com/ - A site (because it includes the http:// prefix)
example.com/ - A domain (because it doesn't include a protocol prefix)
puppies.example.com/ - A subdomain of example.com
http://example.com/petstore/ - A subdirectory of http://example.com site

拜托,谷歌,你们比 API 认证页面上显示的还要聪明。(我知道,因为我有两个儿子在那里工作。)

“引用者”的名单比它表面上看起来的要挑剔得多。(当然,应该更加宽容。)下面是一些我花了 几个小时时间才发现的规则:

可能还有其他规则,但这是一个乏味的猜谜游戏。

我发现即使你的 HTTP Referreres是足够有效的,错误的 API Restrictions设置导致 Google Maps JavaScript API error: RefererNotAllowedMapError

例如:

  • 您正在使用 Javascript API 作为密钥。
  • http://localhost/*添加到 Application Restrictions / HTTP Referrences
  • 选择 Maps Embed API而不是 Maps Javascript API
  • 这会导致 RefererNotAllowedMapError

在过去的几年里,有许多假想的解决方案,有些不再有效,有些从未有效,因此我在2018年7月底的最新工作。

设置:

谷歌地图 JavaScript API 必须与..。

  • 调用 API 的多个域: example.comexample.net
  • 任意子域: user22656.example.com等。
  • 安全和标准 HTTP 协议: http://www.example.com/https://example.net/
  • 不确定的路径结构(即大量不同的 URL 路径)

解决方案:

  • 实际上使用了占位符 <https (or) http>://*.example.com/*中的模式。
  • 不是省略协议,而是在每个域中添加两个条目(每个协议一个)。
  • 子域的附加条目(主机名前面带有 *.)。
  • 我感觉到使用适当的配置(并且等待了足够的时间)仍然会出现 RefererNotAllowedMapError错误。我删除了凭据密钥,重复了这个请求(现在得到了 InvalidKeyMapError) ,创建了新凭据(使用完全相同的设置) ,从那时起,它就一直工作着。
  • 仅仅添加协议和域似乎没有包括子域。
  • 对于其中一个域,工作配置如下:

Screenshot from Google API configuration

(文字:)

Accept requests from these HTTP referrers (web sites)
https://*.example.com/*
https://example.com/*
http://*.example.com/*
http://example.com/*

检查是否启用了正确的 APIS。

我尝试了以上所有的方法,星号,域名 tld,正斜杠,反斜杠等等,甚至最后只输入一个 url 作为最后的希望。

所有这些都不起作用,最后我意识到 Google 还要求你现在就指定你想要使用的 API (见截图)

enter image description here

我没有一个我需要启用(对我来说,这是地图 JavaScriptAPI)

一旦我启用它,所有的工作都很好地使用:

Http://www.example.com/

我希望这对某人有帮助! :)

我经历了同样的错误:

enter image description here

这个链接讨论了如何设置 API 密钥限制: https://cloud.google.com/docs/authentication/api-keys#adding_http_restrictions

在我的例子中,问题在于我使用了这个限制:

HTTP 引用程序(网站)接受来自这些 HTTP 引用程序的请求 (网站)(可选)对通配符使用 * 。如果保留此空白, 请求将被接受从任何推荐人。一定要添加推荐人 在生产中使用此密钥之前。 https://*.example.net/*

这意味着诸如 https://www.example.nethttps://m.example.nethttps://www.example.net/San-salvador/之类的 URL 可以工作。但是,诸如 https://example.nethttps://example.nethttps://example.net/San-salvador/之类的 URL 将无法工作。我只需要添加第二个推荐人:

https://example.net/*

解决了我的问题。

在我发现 RefererNotAllowedMapError可能是由于没有一个与项目相关的账单帐户而导致的之前,这些修复都没有对我起作用。所以一定要激活你的免费试用。

我添加2个网站域名,设置“ *”在子域名不工作,但具体的子域名“ WWW”和非子域名已经为我的网站使用相同的谷歌地图 API 密钥工作。

不要在子域中使用“ *”

希望能有帮助。

子域部分允许使用通配符(星号) 不是

  • 错误: * . example.com/*
  • 右图: example.com/*

忘记谷歌在占位符上说的话吧,这是不允许的。

  1. 你的账单已经开通了

  2. 您的网站已被添加到谷歌控制台

  3. 你的网站被添加到你的应用程序的引用。

  4. (为 www 和 no www 都做一个通配符)

Http://www.example.com/ * 及 http://example.com/ *

  1. 启用了 Javascript Maps 并且使用了正确的凭据

  2. 该网站已添加到您的 DNS,使您的谷歌控制台以上。

  3. 成功之后再微笑!

根据我的经验

Http://www.example.com

还不错 但是,https 最后需要/*

Chrome 的 Javascript 控制台建议我在我的 HTTP 引用列表中声明整个页面地址,在这个例子中是 http://mywebsite.com/map.htm即使确切的地址是 http://www.mywebsite.com/map.htm-我已经有了其他人建议的通配符样式列表,但这是唯一的方法,它将为我工作。

这是另一个糟糕的谷歌产品,它的实现也很糟糕。

我发现的问题是,如果你用 IP 地址来限制一个 API 密钥,它不会起作用... ... 但是谷歌远没有说清楚这一点... ... 直到故障排除和研究我才发现:

带有 IP 地址限制的 API 密钥只能用于 web 从服务器端使用的服务(例如 地理编码 API 和其他 Web 服务 API) 在 Maps JavaScript API 中具有等效的服务(例如, 使用 Maps JavaScript API 客户端 服务,则需要创建一个单独的 API 密钥,该密钥可以是 使用 HTTP 引用限制来保护(请参阅限制 API 钥匙)。

Https://developers.google.com/maps/documentation/javascript/error-messages

FFS 谷歌... 非常重要的一条信息,这将是很好的澄清设置..。

我也努力想让这个方法奏效,但这里有一些建议:

  • 设置为引用者的 URL 包括 http,例如 http://example.com/*
  • 启用了 GoogleMaps JavaScriptAPI
  • 账单是在这个账户上建立的

一旦解决了上述所有问题,地图就会按预期显示。

我正在尝试使用 地点 API (自动完成),并且在 Places API 工作之前必须在 Google 云控制台中启用 地图 Javascript API

这对我很有用。在 API 键设置下有两大类限制:

  • Application restrictions
  • API restrictions

申请限制:

在参考部分的底部添加您的网站网址 “ http://www.grupocamaleon.com/boceto/aerial-simple.html”。在该部分的右侧有基于各种需求的示例规则。

Application restrictions

空气污染指数限制:

在 API 限制下,你必须显式地从下拉列表中选择 ‘ Maps Javascript API’,因为我们唯一的键将只用于调用 Google 地图 API (可能) ,并将其保存为你可以在下面的快照中看到。我希望这对你有用,对我有用

enter image description here

检查你的脚本:

此外,这个问题也可能是由于脚本标记中的键喂养不当而引起的。应该是这样的:

  <script async defer src="https://maps.googleapis.com/maps/api/jskey=YOUR_API_KEY&callback=initMap"
type="text/javascript"></script>

启用谷歌计费项目修复了这个问题。

问题
Google 建议使用 *.example.com/* < br > 这种格式不起作用。

解决方案
检查浏览器控制台中的 GoogleMaps JavaScriptAPI 错误: RefererNotAllowedMapError
在错误下面应该有:”您的站点 URL 将被授权: https://example.com/"。< br > 使用该 url 作为引用程序,并在其末尾添加一个通配符 * (在本例中为 https://example.com/ *)。译注:

如果您正在使用 localhost,则不要在 URL 中包含 http 或 https。

使用“本地主机”而不使用协议。我挣扎了几天,发现它工作。

在这里似乎没有人提到的一件重要的事情也是这样的:

HTTP 引用是 大小写敏感

所以假设你有人访问 https://www.example.com/webpage,并且有人写了一个链接到那个页面作为 https://www.example.com/Webpage,你需要两个条目,否则它们中的一个将不工作(除非你 URL-重写删除大写,或者用/* 替换/网页,但在我们的情况下,我们想限制到某个域名下的文件夹,所以这是一个痛苦的屁股)。

我觉得这有点傻。是的,URL 可以区分大小写,但是不要限制大写的文件夹,但是如果是小写的就不要限制,对吗?

对于这个问题,我所找到的最简洁的答案是使用 *example.com/*