在使用位置服务的移动 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() 清除之前的 watchPosition。然后你再次调用 navigator.geolocation.watchPosition 并保存它的返回值以备下次使用。在这里查看更多信息:developer.mozilla.org/en-US/docs/Web/API/Geolocation/…

以上是关于在使用位置服务的移动 Safari 中使用 geolocation.watchPosition()的主要内容,如果未能解决你的问题,请参考以下文章

Redis Geo: Redis新增位置查询功能

Buildfire:buildfire.geo.getCurrentPosition 不适用于移动应用(android 和 ios)和 PWA

所有移动/桌面设备的地理位置

Safari 中的 html5 地理定位错误

位置:当显示标签栏时,固定“hitboxes”在大尺寸手机上的 iOS 10 Safari 中向上移动

android :geo 使用意图的位置