HTML5 GeoLocation API - 不会调用任何回调

时间:2012-01-18 21:45:08

标签: geolocation

我有一个检查GeoLocation API的代码段。如果它可用,我会尝试获得当前位置。但是根据浏览器的不同,代码的工作方式不同:

    IE中的
  • ,每次F5 refres都会调用successCallback
  • 在FF中,我得到successCallback或errorCallback,错误代码= 2(POSITION_UNAVAILABLE)
  • Chrome中的
  • 我得到成功回复或......没有。我等不及等什么

实际上我需要以一致的方式调用successCallback ...是否有改变来实现它?

代码段:

function successCallback(position) {
    var latitude = position.coords.latitude;
    var longitude = position.coords.longitude;
    alert("Your location is: " + latitude + "," + longitude);
}

function errorCallback(error) {
    console.log(error);
}

if (Modernizr.geolocation) {
    navigator.geolocation.getCurrentPosition(successCallback, errorCallback, { maximumAge: 0 });
    alert("geolocation is enabled");
} else {
    alert("geolocation is NOT enabled");
}

快速记录1:

alert("geolocation is enabled");
每次都会调用

快速说明2:

设定:

maximumAge: 1

效果更好。现在Chrome& IE每次调用successCallback。只有FF吓坏了我,它会随机调用successCallback。

2 个答案:

答案 0 :(得分:3)

你无能为力。您是浏览器开发人员的心血来潮,以及他们如何根据WiFi接入点指纹识别或IP查找来确定您的位置。

出于好奇,我在以下浏览器上测试了代码(http://jsfiddle.net/YbtSZ/2/),发现它的工作方式不一致。

Mac 10.7.2

  • Mac上的Chrome - 正常工作
  • Mac上的FF 9 - 正常工作
  • Mac上的Safari - 无法正常工作

XP原生

  • XP上的FF 9 - 正常工作
  • XP上的IE 8 - 不起作用(不支持地理位置)

XP在Mac中运行虚拟化

  • Chrome on XP(在Mac中虚拟化) - 无效(无法使用POSITION)
  • XP上的FF 9(在Mac中虚拟化) - 不起作用(POSITION_UNAVAILABLE)
  • XP上的IE 8(在Mac中虚拟化) - 不起作用(不支持地理位置)

答案 1 :(得分:0)

您可能想尝试Modernizr,它是一个JavaScript库,可以抽象出HTML5功能,从而获得一致的结果。查看文档以获取更多信息。