Google maps 谷歌地图Javascript API v3中随机出现的不从谷歌地图加载API错误
我的webapp在html头部加载Google Maps JS API v3,如下所示:Google maps 谷歌地图Javascript API v3中随机出现的不从谷歌地图加载API错误,google-maps,google-maps-api-3,Google Maps,Google Maps Api 3,我的webapp在html头部加载Google Maps JS API v3,如下所示: <head> <script src="https://maps.googleapis.com/maps/api/js?key=MY_API_KEY&libraries=places"></script> </head> 我还使用newerror(),捕获了调用gm\u authFailure的调用堆栈。堆栈输出以下内容,建
<head>
<script src="https://maps.googleapis.com/maps/api/js?key=MY_API_KEY&libraries=places"></script>
</head>
newerror(),捕获了调用gm\u authFailure
的调用堆栈。堆栈
输出以下内容,建议使用。正在从Maps.googleapis.com和b.com加载地图库。错误发生在库身份验证时,而不是调用库来使用它
at gm_authFailure (https://EXAMPLE.COM/MY_PATH:3276:22)
at https://maps.googleapis.com/maps-api-v3/api/js/40/7/common.js:73:368
at Qp.o (https://maps.googleapis.com/maps-api-v3/api/js/40/7/common.js:149:177)
at Object.c [as _tj1nu1] (https://maps.googleapis.com/maps-api-v3/api/js/40/7/common.js:67:84)
at https://maps.googleapis.com/maps/api/js/AuthenticationService.Authenticate?1shttps%3A%2F%EXAMPLE.COM%2FMY_PATH&4sMY_API_KEY&callback=_xdc_._tj1nu1&key=MY_API_KEY&token=18280:1:28
gmu authFailure
callstack中,启动的“”URL列出了两次我的API键gm\u authFailure
时,库将不再工作,例如,我无法创建新映射:
var test_map = new google.maps.Map(document.getElementById("test_google_map"), {"zoom":2})
console.log(test_map.zoom)
是未定义的,而不是2我们通过以下方式修复了错误: 通常,您会像这样插入google maps脚本:
<head>
<script src="https://maps.googleapis.com/maps/api/js?key=MY_API_KEY&libraries=places"></script>
</head>
更改后,用脚本替换上面的脚本标记:
(功能(){
//一些浏览器将google maps脚本缓存很长时间,这使得令牌过期。
//为了解决这个问题,我们强制浏览器在12小时后重新蚀刻脚本。这不会有太大的影响
//对性能有很大影响,因为脚本的内容每天都在更改,所以缓存无效
//无论如何。
var GOOGLE\u MAPS\u INVALIDATE\u INTERVAL=12*3600*1000;
var timestamp=Math.floor(Date.now()/GOOGLE\u MAPS\u INVALIDATE\u INTERVAL)*GOOGLE\u MAPS\u INVALIDATE\u INTERVAL;
var src=”https://maps.googleapis.com/maps/api/js?v=quarterly&key=%YOUR_GOOGLE_MAPS_API_KEY%&libraries=geometry,places×tamp=“+timestamp;
//必须使用document.write。如果我们使用document.body.appendChild,主代码(取决于谷歌地图)可能会在谷歌地图执行之前执行
//TODO:我们最终应该使geoUtils成为一个异步函数,只有在GoogleMaps准备就绪时才能解决。
document.write('\u003c/script>');//如果不使用unicode转义(\u003c),浏览器将认为外部脚本已关闭。
})();
说明:
每次发生错误时,用户似乎在一天或几天前访问过该页面
据报道,谷歌地图api的会议持续24小时。会话到期后,将不会从GoogleMapsError加载API
对的请求包含一个参数“token=xxx”。当令牌不正确时,就会发生错误
令牌的值是从请求url和一些幻数中计算出来的,这些幻数在加载自的脚本(加载google地图的初始脚本)中定义。脚本中的魔法数字每天都在变化
在用户离开页面并返回后,浏览器似乎进行了“快速恢复”,这将从缓存加载脚本内容,而不是遵守缓存控制。但是缓存中的幻数已过期,因此会发生错误
但是如果我们用一些带有时间戳的代码替换脚本标记,我们可以确保脚本内容在“快速恢复”之后重新加载