我正在使用Geolocation对象和getCurrentPosition()。
你有没有看到每次你使用getCurrentPosition Firefox和Chrome提示这些按摩?
铬:
Example.com wants to track your physical location [allow] [deny] [ X close ]
火狐:
Example.com wants to know your location [Share Location] [Don't Share] [Close]
我的问题是:当用户没有“允许”或“拒绝”位置选项而是关闭提示时,如何处理?
我有这个JAVASCRIPT代码但是当用户关闭提示时它不起作用:
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
onSuccess,
onError,
{
//enableHighAccuracy: true,
timeout: 5000
//maximumAge: 120000
}
);
alert("holaaaa");
} else {
alert('Geolocation not supported.');
}
我遇到了一些问题,请帮忙吗?
这个问题与这篇文章有关: How to call function when user Allows or Denies access to "Physical Location"?
答案 0 :(得分:15)
spec实际上非常安静,如果用户只是驳回了权限请求(而不是单击“拒绝”按钮),是否必须执行回调:
对于
getCurrentPosition
和watchPosition
,如果没有首先获得用户共享位置的许可,则实施必须永远不会调用successCallback
。此外,在执行上述任何getCurrentPosition
或watchPosition
步骤之前,实现应始终获得用户共享位置的权限。如果用户授予权限,则必须如上所述调用适当的回调。 如果用户拒绝权限,则必须使用代码errorCallback
调用PERMISSION_DENIED
(如果存在),而不考虑上述步骤中遇到的任何其他错误。获取用户权限所花费的时间不得包含在timeout
参数的PositionOptions
属性所涵盖的时间段内。timeout
属性必须仅适用于位置获取操作。
我会说解雇权限请求相当于从getCurrentPosition
的角度拒绝请求。单击拒绝是明确的,而解雇(单击X)是隐式的。
在功能上,区别在于单击拒绝按钮意味着(1)当前请求被拒绝,以及(2)该站点被列入黑名单,并且永远不会提示用户再次为该站点共享位置;简单地解除请求只意味着当前请求被拒绝 - 未来的请求(在重新加载页面后的未来BROWSINGCONTEXT中)将再次提示。
在我看来,Chrome,Firefox和IE的当前行为是一个错误 - 如果用户通过单击X来解除权限请求,则三者都不会执行任何操作。如果地理位置权限请求是errorCallback
,则应调用getCurrentLocation
被解雇是因为当前BROWSINGCONTEXT中对if (navigator.geolocation) {
var etimeout = setTimout(onError, 10000);
navigator.geolocation.getCurrentPosition(onSuccess, onError, {timeout:5000});
}
function onSuccess(pos) {
clearTimeout(etimeout);
// ...
}
function onError(err) {
clearTimeout(etimeout);
// Note `err` will actually be undefined if this is the result of our timeout
// and anything you do here should be undone by `onSuccess` (in case the user
// took longer than 5 seconds to approve the request; for that reason, you
// shouldn't display any modal UI from here.
// ...
}
的任何进一步调用都将无声地失败。 (Opera 11.52表现'正确',因为它的权限请求UI只有允许/拒绝按钮 - 没有X.)
Mozilla有一个bug,他们说当前的行为是正确的,并且是一个较新的bug开放式bug,它是相关的; Chromuim also says目前的行为是正确的。 IE有a bug (需要注册),但奇怪的是,Microsoft将其关闭为不可重现的。
这确实是W3C工作组需要解决的问题。该页面应该能够对拒绝位置权限请求的用户作出反应 - 无论是通过单击X来永久拒绝还是仅拒绝此会话。
你现在唯一能够解决这种情况的事情就是设置你自己的超时。在地理定位请求中设置超时,然后将错误超时设置为长于此值(以允许用户有时间对请求作出反应):
{{1}}