我創建了一個專爲智能手機設計的網站(可訪問http://dev.gkr33.com),並試圖使用navigator.geolocation api並通過getCurrentPosition獲取您的位置。這似乎起初工作,但是如果你嘗試刷新頁面,它總是會帶回上一次的GPS位置。我在頁面上添加了一些調試信息,該信息抓取getCurrentPosition返回的時間,並在初始定位後始終返回相同的時間(下降到毫秒)。navigator.geolocation getCurrentPosition在Chrome Mobile中未更新
這似乎只在Chrome移動設備上發生的。如果我通過股票Android瀏覽器瀏覽網站,它每次都能正常工作。
的代碼如下所示;
<script type="text/javascript">
(function ($) {
$(document).ready(function() {
var options = { enableHighAccuracy: true, maximumAge: 0, timeout: 60000 };
var position;
// empty the current html elements, not strictly necessary but
// I'm clutching at straws
$('#debug-latlng').empty();
$('#debug-time').empty();
$('#debug-address').empty();
// Let's try and find out where we are
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(gotPos, gotErr, options);
} else {
gotErr();
}
// We've got our position, let's show map and update user
function gotPos(position) {
var info;
info = position.coords.latitude+','+position.coords.longitude;
$('#debug-latlng').text(info);
$('#debug-time').text(parseTimestamp(position.timestamp));
// the following json call will translate the longitude and
// latitude into an address (a wrapper for google's geocode call)
$.getJSON('http://dev.gkr33.com/api.php', { req: "getLocationInfo", latlng: $('#debug-latlng').text() }, function(json) {
$('#debug-address').text(json['results'][0]['formatted_address']);
});
var myLatLng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
var mapOptions = {
zoom: 12,
center: myLatLng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);
var marker = new google.maps.Marker({
position: myLatLng,
title: 'You are here',
animation: google.maps.Animation.DROP
});
marker.setMap(map);
} //gotPos
// Trap a GPS error, log it to console and display on site
function gotErr(error) {
var errors = {
1: 'Permission denied',
2: 'Position unavailable',
3: 'Request timeout'
};
console.log("Error: " + errors[error.code]);
$('#debug-latlng').text('GPS position not available');
} //gotErr
// Make timestamp human readable
function parseTimestamp(timestamp) {
var d = new Date(timestamp);
var day = d.getDate();
var month = d.getMonth() + 1;
var year = d.getFullYear();
var hour = d.getHours();
var mins = d.getMinutes();
var secs = d.getSeconds();
var msec = d.getMilliseconds();
return day + "." + month + "." + year + " " + hour + ":" + mins + ":" + secs + "," + msec;
} // parseTimestamp
});
}) (jQuery);
</script>
我玩過maximumAge和timeout的各種值,但似乎沒有影響相同的position.coords和position.time值。
我認爲Chrome Mobile可能存在問題,但我不想在這個時候假設太多,只需要澄清一下,我沒有在代碼中犯過類似muppet的比例錯誤。
任何非常感謝幫助您可以提供。
更新:我想我應該說,我在兩個Android設備測試這一點; HTC One X +和三星Galaxy Tab 7.7,結果相同。在兩個股票瀏覽器工作正常,並在兩個Chrome不刷新位置。將測試上的Apple設備後:)