navigator.geolocation.getCurrentPosition缓存响应,尽管用户启用了位置设置

时间:2015-09-23 16:34:31

标签: javascript jquery html5 w3c-geolocation

我们正在使用navigator.geolocation.getCurrentPosition()来获取用户的当前位置。该函数有三个参数:

  1. 成功获取用户位置时要执行的回调函数
  2. 如果不成功则执行的可选回调函数
  3. 可选设置
  4. 如果用户已在其移动设备(或桌面浏览器)中关闭了位置共享,则将执行第二个回调功能。

    在这种情况下,我们会向用户发送一条警告消息,要求他们启用位置共享。

    我们发现的问题是,如果他们然后去做,然后回到网站并尝试再次点击链接,浏览器似乎已缓存getCurrentPosition()的结果,并执行第二次回调。

    如果他们在更新了位置设置后刷新了网页,那就没关系了。但是,我不确定我们何时可以检测到他们何时重新启用了位置共享?

    我们是否有任何解决办法阻止getCurrentPosition()缓存不成功的响应? 也许使用watchPosition()我也尝试过使用watchPosition,但这也有同样的问题;当用户更新其位置共享设置时,它不会自动更新。

    <a href="" id="clickme">Click Me</a>
    
    $(document).ready(function() {
        $('#clickme').on('click', function() {
            navigator.geolocation.getCurrentPosition(
                function() {
                    console.log('success');
                },
                function(error) {
                    alert('you should enable location sharing');
                    console.log('failure');
                },
                {
                    timeout: 5000,
                    maximumAge: 0,
                    enableHighAccuracy: false
                }
            );      
    
            return false;
        });
    });
    

    您可以在JSFiddle here上查看此代码。

    • 禁用位置共享,单击“运行”,然后单击“单击我”。您应该收到警报消息和失败响应。
    • 启用位置共享,然后点击“Click Me”(无需刷新页面,也无需再次单击“运行”)。您仍会收到警报消息。
    • 刷新页面,这次您将获得成功回复。

0 个答案:

没有答案