navigator.geolocation.getCurrentPosition() 不起作用
Posted
技术标签:
【中文标题】navigator.geolocation.getCurrentPosition() 不起作用【英文标题】:navigator.geolocation.getCurrentPosition() doesn't work 【发布时间】:2012-06-18 17:01:16 【问题描述】:我正在尝试使用地理位置获取当前位置的纬度和经度。直到最近,极其相似的代码还在工作,我不知道它为什么停止工作。它不再设置变量 latitude 或 longitude。当我浏览 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() 不起作用的主要内容,如果未能解决你的问题,请参考以下文章