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

Ste*_*fan 12 javascript w3c-geolocation

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

End*_*ess 20

使用地理位置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))
Run Code Online (Sandbox Code Playgroud)

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

  • 这是一种方便的方法,但是 - 因为它是一个相当新的API - 重要的是要提到可能的兼容性问题.例如:http://caniuse.com/#feat=permissions-api (3认同)

Fen*_*wan 7

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

您可以添加以下 JS 代码:

navigator.permissions.query({name:'geolocation'}).then(function(result) {
  // Will return ['granted', 'prompt', 'denied']
  console.log(result.state);
});
Run Code Online (Sandbox Code Playgroud)

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

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


tko*_*one 6

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

if('geolocation' in window){
     navigator.geolocation.getCurrentPosition(...);
}
Run Code Online (Sandbox Code Playgroud)

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

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


编辑 如果您已在此页面上提示用户加载以允许地理位置访问,则不会再次提示您.如果用户导航并返回此页面,它将重新提示它们.

在页面会话期间,您可以在不提示的情况下对API进行后续调用.

参考:MDN地理位置 - 观察当前位置

  • 我认为“地理位置”位于导航器对象中,而不是窗口对象中。 (2认同)