在使用位置服务的移动 Safari 中使用 geolocation.watchPosition()
Posted
技术标签:
【中文标题】在使用位置服务的移动 Safari 中使用 geolocation.watchPosition()【英文标题】:Using geolocation.watchPosition() in mobile safari using location services 【发布时间】:2017-03-12 13:27:23 【问题描述】:输出地理坐标仅在首次加载时准确,问题是当 iPhone 屏幕超时并且位置服务也超时时。如果我再次打开 safari,地理坐标就会偏离 100 米。如果我将 Safari 应用程序推到后台,也会发生同样的事情。如果我重新加载请求地理定位的 safari 选项卡,或者如果我清除 safari 应用程序缓存并再次打开 safari,则问题已解决。为什么会这样?我的用例涉及向用户显示一个指向目的地的箭头。因此,用户的电话可能偶尔会超时,从而导致定位服务超时。 ios chrome 不会模仿这种行为并按预期工作,即在焦点和/或屏幕超时之后,地理坐标始终是准确的事件。
【问题讨论】:
【参考方案1】:我不知道为什么会这样,但它也发生在我身上。我能够通过使用 window.setInterval 每 5 秒左右调用一个函数来解决该问题,以便检查位置是否已更新。如果没有,则该函数停止并重新启动地理定位监视。
重新启动地理定位手表与重新加载页面具有相同的效果,即准确性再次变得更好,并且位置更新恢复。希望对您有所帮助!
【讨论】:
这对我有用。谢谢你。建议:为“focus”事件添加一个事件监听器(window.addEventListener('focus',func))并在func中重新启动你的watchPosition。最好的方法是保留 watchPosition 的返回值,这样当您的焦点侦听器触发时,您可以使用 navigator.geolocation.clearWatch(以上是关于在使用位置服务的移动 Safari 中使用 geolocation.watchPosition()的主要内容,如果未能解决你的问题,请参考以下文章
Buildfire:buildfire.geo.getCurrentPosition 不适用于移动应用(android 和 ios)和 PWA