navigator.geolocation.getCurrentPosition():如果用户说“不”,则触发回调?

Posted

技术标签:

【中文标题】navigator.geolocation.getCurrentPosition():如果用户说“不”,则触发回调?【英文标题】:navigator.geolocation.getCurrentPosition(): fire callback if user says "no"? 【发布时间】:2011-11-17 23:33:22 【问题描述】:

这是我的代码的近似值:

if (navigator.geolocation) 
    navigator.geolocation.getCurrentPosition(
        function(position) 
          // success! 
        ,
        function(error) 
          // error
        ,
         timeout: 10000 
    );
 else 
    // your browser/device doesn't support geolocation

当这段代码运行时,浏览器会正确地询问用户是否允许跟踪他们的物理位置。如果用户说“是”,它会正确运行第一个参数('success')指定的函数。

我不清楚当用户说“不”时会发生什么。在我到目前为止的测试中(在 Firefox 7 中),如果用户说“不”,则什么也不会发生。我有点期待错误回调(第二个函数)运行,但它没有。我希望对用户的负面回应做出反应(通过删除触发此呼叫的链接)。

【问题讨论】:

【参考方案1】:

您需要在对navigator.geolocation.getCurrentPosition() 的第二次回调中处理它,该回调处理诸如用户拒绝其位置(以及其他事情)等问题。

navigator.geolocation.getCurrentPosition(fn, function(errorCode) 
    if (errorCode == 1) 
       alert('Y U NO GIVE LOCATION?');
    
);

W3C Spec.

List of error codes.

【讨论】:

好吧,如果你给出“不是现在”的答案,看起来 Firefox 不会触发任何回调:***.com/questions/6932758/… bugzilla.mozilla.org/show_bug.cgi?id=675533 正如亚历克斯建议的那样,如果你回应,它将触发错误回调“从不”。 我可以看到mozilla开发者对此的看法。如果没有可用的地理位置,该页面应该具有默认行为,但我也认为“Not Now”这句话就像说“No”一次,但以后不记得我的回应了。 我认为您应该将“不是现在”视为没有答案,就像用户会完全忽略弹出窗口一样。 那么解决这个 Firefox 问题的方法是什么?如果回调在 3 秒内没有触发,我们可以做某种计时器,我们触发警报吗? @KalvinKlien 这可能不可靠,但你可以测试一下。【参考方案2】:

对之前回复的小修正

navigator.geolocation.getCurrentPosition(your_success_function, function(error) 
    if (error.code == 1) 
       alert('Y U NO GIVE LOCATION?');
    
);

【讨论】:

以上是关于navigator.geolocation.getCurrentPosition():如果用户说“不”,则触发回调?的主要内容,如果未能解决你的问题,请参考以下文章