【问题标题】:Using geolocation.watchPosition() in mobile safari using location services在使用位置服务的移动 Safari 中使用 geolocation.watchPosition()
【发布时间】:2024-01-07 11:03:01
【问题描述】:

输出地理坐标仅在首次加载时准确,问题是当 iPhone 屏幕超时并且位置服务也超时时。如果我再次打开 safari,地理坐标就会偏离 100 米。如果我将 Safari 应用程序推到后台,也会发生同样的事情。如果我重新加载请求地理定位的 safari 选项卡,或者如果我清除 safari 应用程序缓存并再次打开 safari,则问题已解决。为什么会这样?我的用例涉及向用户显示一个指向目的地的箭头。因此,用户的电话可能偶尔会超时,从而导致定位服务超时。 iOS chrome 不会模仿这种行为并按预期工作,即在焦点和/或屏幕超时之后,地理坐标始终是准确的事件。

【问题讨论】:

    标签: ios geolocation mobile-safari location-services


    【解决方案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/…
    最近更新 更多