如何检测地理定位的负面用户响应

时间:2011-06-17 00:34:50

标签: javascript firefox html5 geolocation

使用地理位置API时navigator.geolocation.getCurrentPosition()如何处理否定回复?

它表示当出现错误时会调用第二个回调函数。但是,当用户选择不通过取消函数永远不会被触发的请求来显示他的位置时。

似乎getCurrentPosition()无限期地等待答案。 (至少在Firefox 4中)

我怎么知道用户何时按下取消(或没有等)

有什么想法吗?

2 个答案:

答案 0 :(得分:16)

请参阅下面的编辑
你是对的,错误处理程序应该在用户拒绝位置请求时触发。传递给错误处理程序的错误对象应该包含错误代码和消息,让您知道用户拒绝了请求。但是,当我从位置请求对话框中选择Not Now选项时,我在FF4中没有看到这一点。

在Chrome中,API /回调功能完全符合预期,但在Chrome中没有第三种选择。

修改
啊,好吧,我在FF4的行为中发现了一点怪癖。在正常模式(非私人浏览)中,将向用户显示3个选项:

  • 始终分享
  • 永不分享
  • 不是现在

Never share正确触发错误处理程序,但Not Now没有
这是什么意思以及如何处理它?<​​/ strong>

好吧,看起来如果用户点击Not Now,您就不会得到回复。因此,我会设置一个超时,检查由其中一个处理程序设置的标志。如果未设置此标志(意味着处理程序未在指定的时间内触发),您可以执行以下两项操作之一:

  1. 假设用户拒绝了请求(即使拒绝是暂时的)
  2. 您可以再次请求用户(通过相同的呼叫)获得许可,然后将再次向用户显示该对话框。
  3. 选项2可能是糟糕的可用性(并且很烦人),因此最好假设他们暂时拒绝并在下次访问网站时再次(礼貌地!)再次询问他们。


    我创建了一个JsFiddle来玩这个API:

    http://jsfiddle.net/7yYpn/11/

答案 1 :(得分:1)

我不认为这是一个错误,而是在使网站难以提供令人不满意的功能的过程中的故意选择。(如最高答案所暗示;如果您再次提出要求-当有人已经拒绝了时-真烦人...)...

“ not now” ..和“ never” ..之间的区别在于,网站的程序员知道..如果触发了“ not now”,则如果用户发送了“ now now”,则会向用户发出实际提示再次请求。.因此,他将能够“强迫”用户的手接受该请求..或简单地阻止数据,直到用户同意。

体面而又受人尊敬的程序员希望使用这些信息来更好地提供服务(而不是等待不会发生的事情)..但事实是,那里有足够的垃圾邮件发送者,使最终用户不知所措。 / p>

(并且,如果已经用“从不”答复,甚至不需要尝试再次发送请求。.因为,因为用户不会以相同的方式受到惊吓..如果站点变得缓慢并且没有响应,用户将其关闭)

Ps。 OH和SERIOUS程序员实际上可能会将拒绝视为实际..拒绝..并将此选择存储在某处..尽管事实上“不是现在”实际上并不是绝对的拒绝,而是“我决定暂时不采取任何明确立场。” ....有人说“不立即” ..如果服务器知道此选择并将其视为“否”。那么可能永远不会再发送另一个请求。尽管此人想稍后再考虑)