回归地理位置

时间:2013-05-18 05:33:57

标签: if-statement geolocation fallback

我在地理定位的最基本方面遇到了麻烦 - 无论我做什么,我似乎都无法触发回退。这是代码:

if (navigator.geolocation) {

navigator.geolocation.getCurrentPosition(function(position){

var latitude = position.coords.latitude;  
var longitude = position.coords.longitude;
var latNum = parseFloat(latitude);
var longNum = parseFloat(longitude);

紧接着是一堆嵌套的if ... else if语句,这些语句根据用户在多个已定义区域之一中的位置触发不同的函数,并使用else语句来捕获条件用户不在任何已定义的位置。这部分一切正常,包括其他'其他'条件最后。如果用户的设备没有启用地理定位,或者用户在提示时拒绝访问位置数据,那么它就会崩溃。

应该捕获的代码就是:

} else {
   function10();
}

我在FF,Safari和Chrome中尝试了相同的结果:如果我在提示时禁用了位置服务或拒绝访问,那么最后的“其他”'功能不会触发。

我看过无数关于地理位置这种优雅失败的例子,不知道为什么它不起作用。

我真的很感激我出错的任何线索。

1 个答案:

答案 0 :(得分:1)

好的 - 问题解决了!我不确定我是否感到愚蠢或开悟,但为了其他任何有相同问题的人的利益,这是解决方案:

if (navigator.geolocation) {

navigator.geolocation.getCurrentPosition(function(position){

 // Do something here if you get position data

    },

function() {

// Do something else if you don't get any position data 
           }
       ); 
     } 

我认为错误的地方在于我需要查找function(position)的失败,而不是缺少启用地理定位的代理。无论原因是什么,在相同的if条件内的第二个函数在没有从浏览器返回位置数据的情况下提供动作。原始代码(上面)中的最终“else”语句只能在没有地理位置容量的设备上触发。

现在这一切都很有意义,但我不得不说Google上的文档,而且许多教程网站对此并不清楚,经常引用我的初始语法,涵盖未启用地理位置容量的情况(如与不存在不同)。

感谢this answer在SO上指示我正确的方向。