关于Geolocation API中getCurrentPosition方法缓存位置可用性及无缓存时行为的疑问
关于Geolocation API中getCurrentPosition方法缓存位置可用性及无缓存时行为的疑问
嘿,这个问题问得很实在!当你把maximumAge设为Infinity时,规范里说设备必须返回缓存的位置,但这里确实有个前提:得存在可用的缓存位置才行。
首先要明确:如果设备从来没获取过位置信息(完全没有缓存数据),那它根本没办法返回缓存的位置。这种情况下,API不会直接返回错误或者null,而是会触发一次全新的位置获取流程——就跟你没设置maximumAge或者把它设为0时的行为一样,它会去请求当前的实时位置。
不过这里有个细节要注意:如果在获取实时位置的过程中遇到了问题(比如用户拒绝了定位授权、设备的定位硬件出故障),这时候才会调用错误回调函数,返回对应的错误码,比如PERMISSION_DENIED或者POSITION_UNAVAILABLE。
你可以用这段代码简单测试一下:
navigator.geolocation.getCurrentPosition( (position) => console.log('获取到位置:', position), (error) => console.log('出错了:', error.message), { maximumAge: Infinity } );
如果是第一次运行这段代码,设备没有缓存的位置,它就会去请求新的位置;如果之前已经获取过位置有缓存,就会直接返回缓存的数据。
另外,规范里的“must”其实是针对存在缓存的场景来说的——只要有缓存,不管缓存的位置有多旧,都必须返回;但如果没有缓存,那就只能走正常的位置获取流程了,总不能凭空生成一个位置信息对吧?
备注:内容来源于stack exchange,提问作者Karlajw
相关产品推荐
相关产品推荐

