浏览器地理位置:确定以前的权限

Posted

技术标签:

【中文标题】浏览器地理位置:确定以前的权限【英文标题】:Browser geolocation: Determining previous permissions 【发布时间】:2012-07-08 08:49:27 【问题描述】:

好的,我有如下代码:

navigator.geolocation.getCurrentPosition (
    function (e) 
        alert('ok');
    , function (e) 
        alert('denied');
     
);

我可以在页面加载时调用它,如果权限被拒绝,我将隐藏依赖于 geoloc 信息的按钮和功能。

但是,我不想在页面加载时请求权限,而只是在用户选择单击 geoloc 按钮之一时按需请求。

所以在这种情况下,假设用户到达我的页面,之前决定拒绝访问地理定位 API,是否可以判断权限之前已被拒绝,以便我可以隐藏按钮而不必等到他们再次点击其中一个按钮?

【问题讨论】:

【参考方案1】:

您的意思是拒绝访问另一个网站,还是以前访问您的网站?

如果是前者,为什么要假设您服从该决定?也就是别管它,反正再问。

如果是后者,您可能应该在您的网站上存储用户会话期间的决定。如果您使用服务器会话或使用简单的 cookie,则可以在服务器端执行此操作。

【讨论】:

我接受这个答案,因为它是第一个发布的。将查询权限与提示权限混为一谈似乎是规范的遗漏。【参考方案2】:

您可以将结果存储在浏览器中,例如使用 LocalStorage 或 cookie。但是,如果用户第一次拒绝访问并不意味着他下次会这样做。但是,如果您隐藏或禁用按钮,即使他愿意,他也无法使用该功能。现在,如果他连续拒绝 10 次,或者类似的次数,那就更有意义了。

【讨论】:

使用 Chrome 进行测试:第一次调用 getCurrentPosition 会弹出权限对话框以明确询问用户。随后的调用会默默地拒绝该权限,因此无论如何用户都没有机会改变她的决定。 不同的浏览器意味着不同的客户端行为。即使使用 Chrome,用户也可以进入设置并重置权限以再次收到提示。 是的,我还注意到 Chrome 在地址栏的右侧放置了一个小图标,可以直接访问此设置。 问题仍然是,如果用户在之前拒绝权限后,随后点击按钮,则不会重新提示权限。 尝试使用 IE 或 FireFox(或 iPad)

以上是关于浏览器地理位置:确定以前的权限的主要内容,如果未能解决你的问题,请参考以下文章

javascript 使用 alert后,如何返回提交前的网页位置,

地理位置 API 权限 Web 浏览器

微信浏览器跳转页面后再返回,如何恢复到跳转前的位置的问题。

根据地理位置权限更改 HTML 元素的可见性 [重复]

从 Intranet 链接到内部网络位置

Unity 如何获取一个物体上一帧的位置