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