【问题标题】:Javascript GeoLocation CachingJavascript 地理位置缓存
【发布时间】:2013-01-26 16:18:33
【问题描述】:

我正在使用以下方法成功捕获用户的位置(移动浏览器):

<script>
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(handlePosition);
}
function handlePosition(pos) {
    //this passes lat/long to additional code
 }
</script>

这可行,但浏览器通常会看似缓存位置数据。调用此地理定位代码的页面显示了与用户位置相关的信息,因此用户可以移动(更改位置),重新加载页面,但使用之前的位置数据(显示不正确的数据)。有时页面必须刷新一次甚至两次才能使用新的位置数据。

有谁知道在每次执行脚本时强制代码获取和使用“最新”位置数据的任何方法?

FWIW,我在 iOS Safari (6.1) 中遇到问题。尚未能够在 Android 中进行测试。

感谢您的阅读和任何帮助。

【问题讨论】:

    标签: javascript geolocation


    【解决方案1】:

    编辑:正如 Oleksiy 在他的回答中所写,Geolocation API 现在支持这一点。您可以添加{maximumAge: 0} 作为getCurrentPosition 的第三个选项参数。如specification 中所述,PositionOptions 中还有一个超时和高精度选项。

    您的导航器调用将更改为以下内容:

    navigator.geolocation.getCurrentPosition(
      handlePosition, 
      (error)=>{}, 
      {maximumAge:0}
    );
    

    没有,做不到。除了示例中的代码之外,您无法控制浏览器的地理位置。 html5 地理位置 api 非常非常有限,这很痛苦。我也有一个question 是否可以询问是否已授予该域的权限并且答案是否。

    问题在于 api 是在浏览器本身中实现的,而这些功能没有端点。

    您可以做的是在 js 中创建一个数组来存储以前的位置,然后再针对该数组更新视图测试以查看是否有过时的位置。

    【讨论】:

      【解决方案2】:

      你现在确实有这个能力。 getCurrentPosition 接受三个参数:successfailureoptions

      试试这个:

      <script>
      if ( navigator.geolocation ) {
      navigator.geolocation.getCurrentPosition(handlePosition, (error)=>{}, {maximumAge:0});
      }
      function handlePosition(pos) {
          //this passes lat/long to additional code
       }
      </script>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-23
        • 2013-08-19
        相关资源
        最近更新 更多