【问题标题】:check if location setting has been turned off in users browser检查用户浏览器中的位置设置是否已关闭
【发布时间】:2013-01-29 11:58:25
【问题描述】:

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

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

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

感谢您的任何建议。

【问题讨论】:

    标签: javascript jquery browser geolocation


    【解决方案1】:

    你读过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;
      }
    }
    

    【讨论】:

    • 我的浏览器支持 GPS,但我已禁用它。在这种情况下,我什么也得不到。我应该如何检测位置是否被禁用?
    【解决方案2】:

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

    Browsers Supported: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
            }
        })
    

    这里是Reference Link

    其他浏览器的兼容性未知。我自己没有测试过,但请自行测试并在下方评论。

    【讨论】:

    • IE/Safari/Opera等其他浏览器呢?
    • 目前,这些浏览器不支持它。我正在使用参考链接更新答案。
    • 此答案仅允许检查当前站点设置的用户权限状态。但如果用户已授予此站点的此检查权限,但不会为浏览器授予此检查权限,它将返回'granted' 事件。见this answer for possible solution
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    • 2012-10-22
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多