navigator.geolocation.getCurrentPosition() 不起作用

Posted

技术标签:

【中文标题】navigator.geolocation.getCurrentPosition() 不起作用【英文标题】:navigator.geolocation.getCurrentPosition() doesn't work 【发布时间】:2012-06-18 17:01:16 【问题描述】:

我正在尝试使用地理位置获取当前位置的纬度和经度。直到最近,极其相似的代码还在工作,我不知道它为什么停止工作。它不再设置变量 latitudelongitude。当我浏览 js 代码时,getCurrentPosition() 方法被跳过,我不知道为什么。奇怪的是,如果我在 getCurrentPosition() 方法中放置一个警告框,它将正确获取并显示纬度和经度......我不知道为什么会这样。

var gl;
try 
    if (typeof navigator.geolocation === 'undefined')
        gl = google.gears.factory.create('beta.geolocation');
     else 
        gl = navigator.geolocation;
    
 catch(e) 

var latitude;
var longitude;

if (gl) 
    gl.getCurrentPosition(
        function (position) 
            latitude = position.coords.latitude;
            longitude = position.coords.longitude;
            //alert("got the lat & long - lat=" + latitude + ", lng=" + longitude);
        ,
        function (error) 
            alert("Error getting geolocation:" + error);
        
    );
 else 
    alert("Geolocation services are not supported by your web browser.");

然后我继续使用 Google Maps API 在地图上设置一些标记。

非常感谢,

彼得

编辑

JSFiddle 上的代码显示了奇怪的行为:

http://jsfiddle.net/JtmCV/

【问题讨论】:

请正确缩进您的代码!这将使我们更容易跟踪,并帮助您更轻松地发现潜在问题! 很抱歉。现在应该更好了(只是函数名搞砸了)。 通常,如果在 JS 中的 alert() 之后某些东西起作用,我发现它在某处表示竞争条件。你确定这个功能被跳过了吗?你是“踏入”而不是“跨过”吗? 是的,我介入了。如果相关,我正在使用 Chrome 中的开发人员工具进行调试。 奇怪,我唯一能想到的是在回调执行后的某个时刻异步返回了一些东西......如果你在成功回调的主体周围包裹一个setTimeout()怎么样? 【参考方案1】:

我刚刚尝试了您的 jsfiddle,它运行良好(Win 7 上的 Chrome 19),所以我看不出它为什么会导致问题。

话虽如此,我强烈建议改用navigator.geolocation.watchPosition 而不是navigator.geolocation.getCurrentPosition。我最近在地理定位系统上做了一些工作,发现getCurrentPosition 可以返回不可靠的缓存位置,即使您使用 options 参数指定较低的maximumAge 值。

我的最新版本在以下情况之一为真后停止手表:

第五个位置已返回 精度在100m以下 自开始计时已超过 30 秒

【讨论】:

以上是关于navigator.geolocation.getCurrentPosition() 不起作用的主要内容,如果未能解决你的问题,请参考以下文章