2012-01-18 52 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庫,以便獲得一致的結果。查看文檔以獲取更多信息。