我在页面上有 Google Maps Javascript API v3,并且正在使用地理编码库: https ://developers.google.com/maps/documentation/javascript/geocoding
代码
在我的google.maps.Geocoder.geocode
回调函数中,我将 lat,lng 作为 JSON 保存到 Chrome 浏览器中,window.localStorage
如下所示:
if (localStorage.getItem('geocode:'+job.url) === null) {
geocoder.geocode({'address': job.address}, function(results, status) {
var json = JSON.stringify({
address: job.address,
lat: results[0].geometry.location.lat(),
lng: results[0].geometry.location.lng()
});
console.log('Set key:"geocode:'+job.url+'", value: '+json);
localStorage.setItem('geocode:'+job.url, json);
console.log('Get key:"geocode:'+job.url+'", value: '+localStorage.getItem('geocode:'+job.url));
});
}
问题是我的键在回调函数之外设置为 null 。在上面的代码运行并打印两条日志消息后,在控制台中输入以下内容会显示问题:
> localStorage.length;
1
> localStorage.key(0);
"geocode:123 street San Francisco CA USA"
> localStorage.getItem("geocode:123 street San Francisco CA USA");
null
将我的 localStorage 密钥前缀更改为 'blah:' 可以解决问题!
这是否意味着 Google Maps Javascript API v3 地理编码库会在回调函数返回后覆盖带有前缀“geocode:”的 localStorage 键?
额外的背景信息:
我在页面上包含来自 Chrome 扩展 url 的此脚本代码,例如:
<script src="chrome:///blah" type="text/javascript"></script>
调用google.maps.Geocoder.geocode
和回调函数是从window.setTimeout
处理程序调用的。