检查Geolocation是否被允许并获得Lat Lon

时间:2012-04-09 18:07:13

标签: javascript w3c-geolocation

我正在构建一个客户端将在其页面上安装的小脚本。地理位置不是必需的,但如果它存在,那将是很好的。有没有办法让我检查客户页面是否已请求地理位置信息,如果用户选择允许获取lat& lon没有创建另一个提示?

5 个答案:

答案 0 :(得分:19)

使用地理位置API是不可能的,但可以使用新的权限API

如果您想尝试接收坐标但不想通过提示对话框打扰用户,此代码非常有用,因为坐标不是那么重要,并且可能会回退到geoIP



function getCoords() {
  return new Promise((resolve, reject) =>
    navigator.permissions ?

      // Permission API is implemented
      navigator.permissions.query({
        name: 'geolocation'
      }).then(permission =>
        // is geolocation granted?
        permission.state === "granted"
          ? navigator.geolocation.getCurrentPosition(pos => resolve(pos.coords)) 
          : resolve(null)
      ) :

    // Permission API was not implemented
    reject(new Error("Permission API is not supported"))
  )
}

getCoords().then(coords => console.log(coords))




如果未授予权限,则会解析为null,如果某些javascript代码未被浏览器支持则转换为错误,如果已授予该坐标,则会解析为

答案 1 :(得分:6)

您可以通过检查窗口对象来检测该功能是否存在。

if('geolocation' in window){
     navigator.geolocation.getCurrentPosition(...);
}

这将导致单个用户提示询问用户是否希望与您的页面共享其位置。

如果浏览器中没有地理位置,则根本不会运行。

<小时/> 的修改 如果您已在此页面加载上提示用户允许地理位置访问,则不会再次提示您。如果用户导航并返回此页面,它将重新提示它们。

您可以在该页面会话期间无需提示即可对API进行后续调用。

参考:MDN Geolocation -- Watching the current position

答案 2 :(得分:4)

根据API,无法找到用户已经允许当前网站检索用户的位置而不会在没有提示的情况下如果他没有。见Endless answer

我建议您在嵌入脚本时允许用户传递参数,告诉它是否应该使用地理定位功能。

答案 3 :(得分:2)

您是否被提示似乎取决于浏览器以及隐私&#39;设置得到了。 Safari 6有3个设置:每个站点提示一次,每个站点每天提示一次,并拒绝。 Chrome 23有3个设置:允许全部,询问和拒绝全部。如果有办法在没有打扰用户的情况下检查它是否已被允许,肯定会变好。

答案 4 :(得分:2)

我也遇到了同样的问题。在我搜索和实验后,我终于找到了答案。

您可以添加此JS代码:

RowProcessor

然后您可以根据需要使用自定义代码。

来源:https://developer.mozilla.org/en-US/docs/Web/API/Navigator/permissions