22

我想隐藏()或显示()一个按钮,允许用户根据他们当前是否允许在浏览器设置中使用位置来使用他们当前的位置。下面的代码只检查浏览器是否支持地理定位,而不是特定用户是否允许它。

if (navigator.geolocation)  {
   navigator.geolocation.getCurrentPosition(showPosition);
   } else  {
 x.innerHTML="Geolocation is not supported by this browser.";}
 } 

是否有一个布尔值可以检测到他们的浏览器设置,让我知道当前是否允许定位?

感谢您的任何建议。

4

2 回答 2

40

你读过http://www.w3schools.com/html/html5_geolocation.asp

您要做的是检查错误以查看它们是允许还是拒绝请求。

function getLocation() {
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(showPosition,showError);
  } else {
    x.innerHTML = "Geolocation is not supported by this browser.";
  }
}

function showPosition(position) {
  x.innerHTML = "Latitude: " + position.coords.latitude + "<br>Longitude: " + position.coords.longitude;    
}

function showError(error) {
  switch(error.code) {
    case error.PERMISSION_DENIED:
      x.innerHTML = "User denied the request for Geolocation."
      break;
    case error.POSITION_UNAVAILABLE:
      x.innerHTML = "Location information is unavailable."
      break;
    case error.TIMEOUT:
      x.innerHTML = "The request to get user location timed out."
      break;
    case error.UNKNOWN_ERROR:
      x.innerHTML = "An unknown error occurred."
      break;
  }
}
于 2013-02-13T20:03:32.063 回答
27

下面的代码将允许您在不调用navigator.geolocation权限请求的情况下检查权限状态。

支持的浏览器:Chrome(43+)、Firefox(46+)、Edge 和 Opera。

不支持:Safari(mac, ios), Internet explorer, Android webview。

    navigator.permissions && navigator.permissions.query({name: 'geolocation'})
    .then(function(PermissionStatus) {
        if (PermissionStatus.state == 'granted') {
              //allowed
        } else if (PermissionStatus.state == 'prompt') {
              // prompt - not yet grated or denied
        } else {
             //denied
        }
    })

这是参考链接

其他浏览器的兼容性未知。我自己没有测试过,但请感觉自己测试一下并在下面发表评论。

于 2017-04-06T16:42:33.620 回答