2012-01-18 50 views
1

我有一个检查GeoLocation API的代码片段。如果可用,我试图获得当前位置。但是取决于浏览器,代码的工作方式不同:HTML5地理位置API - 不调用任何回调

    在IE
  • ,successCallback被称为每F5 refres
  • 在FF,我得到successCallback或errorCallback与铬
  • 错误代码= 2(POSITION_UNAVAILABLE)我得到successCallback或...什么也没有。我等待,没有任何东西

其实我需要以一致的方式调用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每次都会调用successCallback Chrome &。只有FF吓到我了,它随机调用successCallback。

回答

3

对此可以做的不多。你是浏览器开发人员的心血来潮,他们是如何尝试根据WiFi接入点指纹或IP查找来确定你的位置的。

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

Mac 10.7。2

  • Chrome的Mac上 - 工程
  • FF 9 Mac上 - 工程
  • Mac上的Safari - 不工作

XP本地

  • FF 9在XP上 - 作品
  • IE 8 on XP - 不起作用(地理位置不支持)

XP上运行的虚拟化在Mac

  • 浏览器在XP(在Mac虚拟化) - 不起作用(POSITION暂不提供服务)
  • FF 9在XP(虚拟化在Mac) - 不起作用(POSITION_UNAVAILABLE)
  • IE 8在XP(虚拟化在Mac) - 不起作用(地理位置不支持)
0

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