lit*_*ito 9 javascript google-chrome geolocation w3c-geolocation
我正在使用Geolocation对象和getCurrentPosition().
你有没有看到每次你使用getCurrentPosition Firefox和Chrome提示这些按摩?
铬:
Example.com wants to track your physical location [allow] [deny] [ X close ]
Run Code Online (Sandbox Code Playgroud)
火狐:
Example.com wants to know your location [Share Location] [Don't Share] [Close]
Run Code Online (Sandbox Code Playgroud)
我的问题是:当用户没有"允许"或"拒绝"位置选项而是关闭提示时,如何处理?
我有这个JAVASCRIPT代码但是当用户关闭提示时它不起作用:
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(
onSuccess,
onError,
{
//enableHighAccuracy: true,
timeout: 5000
//maximumAge: 120000
}
);
alert("holaaaa");
} else {
alert('Geolocation not supported.');
}
Run Code Online (Sandbox Code Playgroud)
我遇到了一些问题,请帮忙吗?
这个问题与这篇文章有关: 如何在用户允许或拒绝访问"物理位置"时调用函数?
jos*_*736 16
该规范实际上是一个回调是否必须被执行相当安静,如果用户简单地驳回许可请求(而不是点击拒绝按钮):
对于这两个
getCurrentPosition和watchPosition的实现必须永不调用successCallback,而无需用户事先取得许可共享位置.此外,在执行上述任何getCurrentPosition或watchPosition步骤之前,实现应始终获得用户共享位置的许可.如果用户授予权限,则必须如上所述调用适当的回调.如果用户拒绝许可,errorCallback则必须使用代码调用(如果存在)PERMISSION_DENIED,而不管上述步骤中遇到的任何其他错误.获取用户权限所花费的时间不得包含在参数timeout属性所涵盖的时间段内PositionOptions.该timeout属性必须仅适用于位置获取操作.
我要说,驳回许可请求相当于拒绝请求getCurrentPosition.单击拒绝是显式的,而解雇(单击X)是隐式的.
在功能上,区别在于单击拒绝按钮意味着(1)当前请求被拒绝,以及(2)该站点被列入黑名单,并且将永远不会提示用户再次共享该站点的位置; 简单地解除请求只意味着当前请求被拒绝 - 将来的请求(在重新加载页面后的未来BROWSINGCONTEXT中)将再次提示.
在我看来,Chrome,Firefox和IE的当前行为是一个错误 - 如果用户通过单击X来解除权限请求,则三者都不会执行任何操作.errorCallback如果地理位置许可请求被解除,则应该调用该错误,因为任何进一步的调用都getCurrentLocation在目前的BROWSINGCONTEXT将无声地失败.(Opera 11.52表现'正确',因为它的权限请求UI只有允许/拒绝按钮 - 没有X.
Mozilla有一个错误,他们说当前的行为是正确的,并且是一个相关的新bug漏洞!Chromuim还说目前的行为是正确的.IE有一个错误 (需要注册),但奇怪的是,微软将其关闭为不可重现的.
这实际上是W3C工作组需要解决的问题.该页面应该能够通过单击X来拒绝用户拒绝位置权限请求 - 无论是永久拒绝还是仅拒绝此会话.
你现在唯一能够解决这种情况的事情就是设置你自己的超时.在地理位置请求中设置超时,然后将错误超时设置为长于此值(以允许用户有时间对请求作出反应):
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.
// ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4611 次 |
| 最近记录: |