我正在构建一个客户端将在其页面上安装的小脚本。地理位置不是必需的,但如果它存在,那将是很好的。有没有办法让我检查客户页面是否已请求地理位置信息,如果用户选择允许获取lat& lon没有创建另一个提示?
答案 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进行后续调用。
答案 2 :(得分:4)
答案 3 :(得分:2)
您是否被提示似乎取决于浏览器以及隐私&#39;设置得到了。 Safari 6有3个设置:每个站点提示一次,每个站点每天提示一次,并拒绝。 Chrome 23有3个设置:允许全部,询问和拒绝全部。如果有办法在没有打扰用户的情况下检查它是否已被允许,肯定会变好。
答案 4 :(得分:2)
我也遇到了同样的问题。在我搜索和实验后,我终于找到了答案。
您可以添加此JS代码:
RowProcessor
然后您可以根据需要使用自定义代码。
来源:https://developer.mozilla.org/en-US/docs/Web/API/Navigator/permissions