【问题标题】:HTML5 GEOLocation 2nd promptHTML5 GEOLocation 第二个提示
【发布时间】:2013-04-15 22:49:59
【问题描述】:

在用户拒绝位置共享后,有没有办法在某个触发器上再次提示用户进行地理定位?

navigator.geolocation.getCurrentPosition 

触发一次,连续调用不会产生相同的结果。到处都找不到答案/

【问题讨论】:

    标签: html geolocation


    【解决方案1】:

    最好的选择是设置一个地理定位子域,并将其加载到 iframe 中。

    geo-0.domain.com
    geo-1.domain.com
    geo-2.domain.com
    geo-3.domain.com
    geo-4.domain.com
    geo-N.domain.com
    

    这将允许您在每个浏览器上进行无限制的尝试,您所需要做的就是编写自己的重试逻辑。

    【讨论】:

      【解决方案2】:

      在地理定位 API 中?没有。

      如果用户点击拒绝权限,它只是意味着“不,不要再打扰我......”

      但是用户可以通过删除 Location-share-settings 来做到这一点,然后当然会再次弹出提示。

      如果浏览器允许,用户也可以更改设置,但是例如Chrome 将这些设置作为例外进行管理(无论用户是允许还是拒绝权限),因此用户必须分别删除这些设置。还是例外。

      现在怎么办?

      您唯一的选择是捕获错误并使用例如一些外部 API 通过 IP 查找用户的位置。你可以自己编程,当然也有@Venkat 建议的现有解决方案。

      但请注意,IP 地理定位是一个棘手的问题 - 有时它具有地址数字精度,有时它只是状态精度。

      这个例子from Mozilla's docs 展示了如何处理地理定位错误的一个很好的例子:

      var options = {
        enableHighAccuracy: true,
        timeout: 5000,
        maximumAge: 0
      };
      
      function success(pos) {
        var crd = pos.coords;
      
        console.log('Your current position is:');
        console.log('Latitude : ' + crd.latitude);
        console.log('Longitude: ' + crd.longitude);
        console.log('More or less ' + crd.accuracy + ' meters.');
      };
      
      function error(err) {
        /*
        CALL EXTERNAL API HERE
        */
        console.warn('ERROR(' + err.code + '): ' + err.message);
      };
      
      navigator.geolocation.getCurrentPosition(success, error, options);
      

      【讨论】:

        【解决方案3】:

        看看这个代码片段和这个 SO 答案:What is the best JQuery plugin that handles HTML5 location?

        if (navigator.geolocation) {
           navigator.geolocation.getCurrentPosition(successFunction, errorFunction);
        }else{
           errorFunction();
        }
        
        function successFunction(position) { //uses HTML5 if available
            var lat = position.coords.latitude;
            var lng = position.coords.longitude;
        }
        
        function errorFunction(){ //uses IP if no HTML5
           $.getJSON("http://freegeoip.net/json/", function(res){
                var lat = res.latitude;
                var lng = res.longitude;
           });
        }
        

        看看这个Fiddle链接也 JQuery Geolocator Plugin

        【讨论】:

        • 这是否真的解决了这里的问题(允许地理定位查找的提示在被拒绝后不会再次出现)......?我对此表示怀疑。
        • 虽然没有回答我的问题
        • 我想解决它的唯一方法是刷新页面(如果它是一个选项)以便能够再次提示。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-14
        • 2013-07-22
        • 2013-01-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多