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

Sin*_*nan 12 javascript firefox html5 geolocation

使用地理定位API时navigator.geolocation.getCurrentPosition()如何处理否定响应?

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

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

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

有任何想法吗?

Pol*_*878 16

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

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

编辑
啊,好吧我在FF4的行为中发现了一点怪癖.在正常模式下(非私密浏览),用户将看到3个选项:

  • 永远分享
  • 绝不分享
  • 现在不要

Never share正确触发错误处理程序,但Not Now没有.

这是什么意思以及如何处理它?

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

  1. 假设用户拒绝了请求(即使拒绝是临时的)
  2. 您可以再次询问用户权限(通过相同的调用),然后将再次向用户显示该对话框.

选项2可能是糟糕的可用性(并且很烦人),因此最好假设他们暂时拒绝并在他们下次访问该网站时再次(礼貌地!)问他们.


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

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

  • 这是一个API的笑话. (4认同)
  • 看起来有一个错误:https://bugzilla.mozilla.org/show_bug.cgi?id = 650247 (2认同)