2011-11-23 41 views
9

我努力在HTML地理位置中使用maximumAge參數。它在Chrome中的工作方式似乎與規範不符。Chrome地理位置似乎忽略maximumAge參數

我已經read through the geolocation API spec從我能理解的情況來看,如果你將maximumAge設置爲零,你應該總是得到一個新的位置。

的maximumAge屬性表明應用程序願意接受 其年齡不超過規定的 時間以毫秒爲單位更大的緩存位置。如果maximumAge設置爲0,則實現 必須立即嘗試獲取新的位置對象。將maximumAge設置爲Infinity必須確定實現以返回一個 緩存位置,而不考慮其年齡。如果實現不具有可用的高速緩存位置,其年齡不大於指定的最大年齡,則它必須獲取新的位置對象。在 一個watchPosition()的情況下,maximumAge指的是實現返回的第一個位置 對象。

不過,這是我的代碼:

function gpsSuccess(pos) { 
    var positionDate = new Date(pos.timestamp); 
    var currentDate = new Date(); 
    console.log(positionDate.toLocaleString(), currentDate.toLocaleString()); 
} 
watchId = navigator.geolocation.watchPosition(gpsSuccess, 
    gpsFail, { 
     enableHighAccuracy: true, 
     maximumAge: 0, 
     timeout: 27000 
}); 

而且我看到以下內容:

Wed Nov 23 2011 10:25:43 GMT+0000 (GMT), Wed Nov 23 2011 10:52:16 GMT+0000 (GMT) 

所以這是獲得的位置和當前時間之間有一個小時的差別一半。

我認爲這可能只是衛星時間和當地時間之間的差異,但我一直在刷新刷新,並且positionDate沒有改變,即使currentDate是。

即使maximumAge設置爲零,爲什麼仍然重複使用相同的緩存位置?

這是Chrome,BTW。

+0

我一直注意到Safari-mobile的類似行爲。非常令人沮喪。我希望我知道在我需要時可以強制進行新的地理查找。我認爲,就像你所做的那樣,將maximumAge設置爲零就可以做到這一點(正如規範解釋的那樣)。猜不... – robmclarty

+0

似乎有可能根本就沒有控制這個:http://stackoverflow.com/questions/14814256/javascript-geolocation-caching – robmclarty

+0

根據您的使用情況,這個問題可能是非常煩人的。我通過設置一個標誌並忽略成功回調中返回的第一個位置對象來解決這個問題。 – bardu

回答

0

這是不可能的。同樣的事情發生在一些html5標籤上,比如webkit語音,你不能通過代碼激活。你沒有太多的控制權,對不起。