HTML5地理位置2次提示

7
有没有一种方法可以在某些触发器上再次要求用户提供地理位置,即使他们拒绝了位置共享?
navigator.geolocation.getCurrentPosition 

执行一次后,连续的调用不会产生相同的结果。无法在任何地方找到答案。

3个回答

0

在地理位置API中?不是的。

如果用户拒绝了权限,那就意味着“不行,别再打扰我了...”

然而,用户可以通过删除位置共享设置来实现,这样当然会再次弹出提示。

或者,如果浏览器允许,用户可以直接更改设置,但例如Chrome将这些设置管理为异常情况(无论用户是否允许或拒绝权限),因此用户必须删除设置或异常情况。

现在怎么办?

您唯一的选择是捕获错误并使用某些外部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);

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

这将允许您在每个浏览器上进行无限次尝试,您只需要编写自己的重试逻辑即可。


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


这是否真正解决了问题(即一旦拒绝了地理位置查找提示后,它不会再次出现)...?我怀疑。 - CBroe
虽然这并没有回答我的问题。 - Stas Svishov
我猜唯一的解决方法就是刷新页面(如果有这个选项),以便再次提示。 - Stas Svishov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接