HTML5 GEOLocation第二个提示

时间:2013-04-22 21:40:12

标签: html5 geolocation

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

navigator.geolocation.getCurrentPosition 

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

3 个答案:

答案 0 :(得分:0)

请看一下此代码片段以及此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

答案 1 :(得分:0)

在Geolocation API中?否。

如果用户点击拒绝权限,则仅表示"否,并且不要再打扰我了......"

但是,用户可以通过删除位置共享设置来执行此操作,然后当然会再次弹出提示。

或者用户可以在浏览器允许的情况下更改设置,例如, 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);

答案 2 :(得分: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

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