如何在没有密钥的情况下使用Google Maps v3 API?我在this example中看过它,但无法弄清楚具体是什么导致它不会出错。
编辑:如果有人建议,StackOverflow上关于此主题的其他答案已过时且不再适用。
答案 0 :(得分:24)
A key is now required。以前它不是必需的,并且在2016年6月22日之前使用没有密钥的API的网站已被允许继续工作。
请参阅this blog post for additional information(相关文字):
截至2016年6月22日,我们对Google Maps API标准计划进行了以下更改:
- 我们不再支持无密钥访问(任何不包含API密钥的请求)。未来的产品更新仅适用于使用API密钥发出的请求。 API密钥允许我们在需要时联系开发人员,帮助我们识别行为不当的实现。
- 我们已经为新的Google Maps JavaScript API,Static Maps API和街景图像API实施实施了每天25,000个地图加载限制。这些API连续90天的宽限期将于2016年10月12日停用。通过此更改,开发人员可以预测增长计划,而媒体网站和美国公益组织可以通过我们的专用支持计划免费申请更多配额。
- 我们已经针对每个API的1,000,000到100,000个请求减少了您可以针对Google Maps JavaScript API,Static Maps API和街景图像API购买的每日地图加载最大限制。*我们认为大批量开发者最适合使用Premium Plan许可,包括技术支持和服务级别协议,通过此更改,我们还在地图和Web服务API之间创建了标准计划配额之间的一致性。
- 我们现在将Google Maps JavaScript API客户端请求计入相关网络服务API的每日限额。*
醇>新政策将立即适用于2016年6月22日或之后创建的所有Maps API实施。
现有应用程序已根据其当前使用情况进行了广泛,以确保它们现在和将来都能继续运行。我们还将主动联系所有现有API密钥用户,这些用户根据使用量增长模式可能会在未来受到影响。如果您是现有用户,请花点时间阅读我们的标准计划摘要政策更新,详细了解每项更改可能会如何影响您的实施。
答案 1 :(得分:16)
确实,您发布的http://www.birdtheme.org/useful/v3largemap.html链接无需密钥(控制台中只有一个警告)。 看起来谷歌正在将一些域名列入白名单,以允许在没有密钥的情况下使用API。
我尝试使用Google Maps API v3来显示OpenStreetMap磁贴,但它会产生一个" Google Maps API错误:MissingKeyMapError"在我的localhost上,当它在没有API密钥的网站上工作时:http://harrywood.co.uk/maps/examples/google-maps/apiv3.html
在大多数不使用API密钥的网站上,有一个错误会阻止使用Google地图,但您可以绕过此审查。
解决方案,如果您没有密钥使用Google Maps API来拥有服务器:
阻止使用AdBlockPlus和规则http://maps.googleapis.com/maps/api/js/AuthenticationService.Authenticate?*
这样您就可以访问Google Maps API图块,标记,infoWindow弹出窗口......
但是,如果您想使用地理编码API,您还必须使用浏览器插件remove your HTTP referer header
,例如"修改标题"。
在您的网页中添加解决方案,以便每位访问者无需密钥即可访问Google Maps API:
以下是我创建的JavaScript hack,无需密钥即可使用Google Maps API V3并绕过错误消息。
// hack Google Maps to bypass API v3 key (needed since 22 June 2016 http://googlegeodevelopers.blogspot.com.es/2016/06/building-for-scale-updates-to-google.html)
var target = document.head;
var observer = new MutationObserver(function(mutations) {
for (var i = 0; mutations[i]; ++i) { // notify when script to hack is added in HTML head
if (mutations[i].addedNodes[0].nodeName == "SCRIPT" && mutations[i].addedNodes[0].src.match(/\/AuthenticationService.Authenticate?/g)) {
var str = mutations[i].addedNodes[0].src.match(/[?&]callback=.*[&$]/g);
if (str) {
if (str[0][str[0].length - 1] == '&') {
str = str[0].substring(10, str[0].length - 1);
} else {
str = str[0].substring(10);
}
var split = str.split(".");
var object = split[0];
var method = split[1];
window[object][method] = null; // remove censorship message function _xdc_._jmzdv6 (AJAX callback name "_jmzdv6" differs depending on URL)
//window[object] = {}; // when we removed the complete object _xdc_, Google Maps tiles did not load when we moved the map with the mouse (no problem with OpenStreetMap)
}
observer.disconnect();
}
}
});
var config = { attributes: true, childList: true, characterData: true }
observer.observe(target, config);
这样您就可以访问Google Maps API图块,标记,infoWindow弹出窗口...... 对于地理编码API,您还必须使用下面的HTML元标记删除HTTP引用。
<meta name="referrer" content="no-referrer"> <!-- don't send HTTP referer for privacy purpose and to use Google Maps Geocoding API without key -->
答案 2 :(得分:8)
从2018年6月11日开始,您无法再使用没有密钥的GoogleMaps API。
答案 3 :(得分:0)
我可以在没有任何api键或javascript代码的情况下将位置指示器放置在网站中
我可以使用Fancybox轻松显示Google Maps模式框。
<head>
<script src="//code.jquery.com/jquery-3.3.1.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.6/dist/jquery.fancybox.min.css" />
<script src="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.6/dist/jquery.fancybox.min.js"></script>
</head>
<body>
<a data-fancybox="" data-options="{"iframe" : {"css" : {"width" : "80%", "height" : "80%"}}}" href="https://www.google.com/maps/search/?api=1&query=centurylink+field" class="btn btn-primary">Open Modal Map</a>
</body>
答案 4 :(得分:-2)
<script language="javascript" src="https://maps.google.com/maps/api/js"></script>
<script>
var target = document.head;
var observer = new MutationObserver(function(mutations) {
for (var i = 0; mutations[i]; ++i) { // notify when script to hack is added in HTML head
if (mutations[i].addedNodes[0].nodeName == "SCRIPT" && mutations[i].addedNodes[0].src.match(/\/AuthenticationService.Authenticate?/g)) {
var str = mutations[i].addedNodes[0].src.match(/[?&]callback=.*[&$]/g);
if (str) {
if (str[0][str[0].length - 1] == '&') {
str = str[0].substring(10, str[0].length - 1);
} else {
str = str[0].substring(10);
}
var split = str.split(".");
var object = split[0];
var method = split[1];
window[object][method] = null;
}
observer.disconnect();
}
}
});
var config = { attributes: true, childList: true, characterData: true }
observer.observe(target, config);
</script>