7

Is there a way to prompt user for geolocation again on some trigger, after they denied the location sharing?

navigator.geolocation.getCurrentPosition 

fires it once, consecutive calls do not produce the same result. Cant find the answer anywhere/

4

3 回答 3

0

看看这个代码片段和这个 SO 答案: 处理 HTML5 位置的最佳 JQuery 插件是什么?

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

于 2013-06-21T10:17:44.577 回答
0

在地理位置 API 中?不。

如果用户单击拒绝权限,则仅表示“不,不要再打扰我......”

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

或者用户可以在浏览器允许的情况下更改设置,但是例如 Chrome 将这些设置作为例外管理(无论用户是否允许或拒绝权限),因此用户必须删除设置,resp。反正例外。

现在怎么办?

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

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

Mozilla文档中的这个示例展示了如何处理地理位置错误的一个很好的示例:

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);
于 2014-11-24T18:10:58.557 回答
0

最好的选择是设置一个地理定位子域,并将其加载到 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

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

于 2018-06-25T08:02:53.597 回答