如何捕获Google Maps无效API密钥

19

我有这段代码:

<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=false&amp;key=babab" type='text/javascript'></script> 
如果密钥无效,则会弹出一个警告,但我想在这种情况下执行一些操作。不过我不确定如何挂钩它。有什么想法吗?
如果密钥无效,则会弹出一个警告,但我希望在这种情况下执行某些操作。不过我不确定如何进行钩子处理。有什么建议吗?

3
嗯,有趣。我认为谷歌地图没有检查这个机制。你可以尝试包装“alert()”并解析文本(看看是否为错误信息),但这似乎是一种丑陋的hack方法。 - Piskvor left the building
1
将警报功能分配给一个变量,在脚本包含之前用其他内容替换警报功能,并在包含完成后将其替换回来... - tshao
3个回答

5

谷歌不提供外部方法来检查Google Maps API密钥。因此,您无法使用例如“是否有效的代码abcde1234”查询某些服务并获得TRUE/FALSE响应。

有一篇关于Maps API密钥如何生成的讨论。但我建议您查看Mike Williams关于GValidateKey函数的帖子。这个函数实际上执行了神奇的验证 - 它确切地做了什么,比如从您的Google账户/域名创建哈希值 - 我们不知道。

我看到您检查API密钥是否正确的问题有两个解决方案:

  1. 用一些自定义代码覆盖传入的警报(检查警报的内容,或者在页面加载后X秒内检查是否出现警报)
  2. 以某种方式使 GValidateKey 函数事先验证您的密钥。也许您可以在引用 API JavaScript 之前调用它?这听起来有点像黑客...

您可能会遇到的问题是,您不知道 Google 实际检查什么。引荐者、引荐网站、主机 - 很多可能性(它不是服务器的 IP 地址,而是名称加上一些其他信息)。


感谢提供这些有用的信息。我并不是想知道一个给定的API密钥是否有效,而更多的是需要处理错误,如果它被设置不正确的话,还要适当地不尝试调用地图对象上的一堆东西(因为它不存在),以及调用其他谷歌方法。 - NibblyPig
使用GMaps版本3,您不再需要密钥!(http://code.google.com/apis/maps/documentation/javascript/basics.html)。老实说,我认为您不应该检查GMaps Javascript是否已加载,而应该检查初始GMap对象是否可用,然后从那里开始(例如:https://dev59.com/DHRA5IYBdhLWcg3wxA9N)。 - Dennis G
1
非常希望使用V3,但我们大多数用户使用IE6,而它不兼容:( - NibblyPig

5

我刚刚遇到了需要在使用无效的API密钥时执行一个操作的情况。谷歌的文档显示:

如果您想以编程方式检测身份验证失败(例如自动发送信标),可以准备一个回调函数。 如果定义了以下全局函数,当身份验证失败时,它将被调用。

这就是我所需要做的全部:

function gm_authFailure() { // Perform action(s) }

这对于捕获所有类型的API密钥异常非常有效。如果您想以不同方式处理每种类型的错误,那么我会执行https://dev59.com/rHA65IYBdhLWcg3wsw4X#43758757 - Karan Bhandari

2

对于现代浏览器(IE9+和其他浏览器),您可以使用DOMNodeRemoved事件。您只需要向地图构造函数传递的元素添加事件处理程序:

var map = new google.maps.Map(element, myOptions);

 element.addEventListener("DOMNodeRemoved", function(e){
   if (e.target === element){
     //your code here
     element.removeEventListener("DOMNodeRemoved", mapWasRemovedHandler, true);
   }
 }, false);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接