【问题标题】:HTML5 GeoLocation API - no callback is called whatsoeverHTML5 GeoLocation API - 不调用任何回调
【发布时间】:2012-02-13 15:08:38
【问题描述】:

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

  • 在 IE 中,每次 F5 引用都会调用 successCallback
  • 在 FF 中,我得到 successCallback 或 errorCallback,错误代码 = 2 (POSITION_UNAVAILABLE)
  • 在 Chrome 中,我得到了 successCallback 或...什么也没有。我等啊等,什么都没有

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

代码sn-p:

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。

【问题讨论】:

    标签: geolocation


    【解决方案1】:

    您对此无能为力。你是浏览器开发者的心血来潮,以及他们如何尝试根据 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 - 不工作(不支持地理位置)

    在 Mac 中运行虚拟化的 XP

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-13
        • 2016-08-27
        • 2014-11-05
        • 1970-01-01
        • 2013-01-26
        相关资源
        最近更新 更多