Tôi đã tạo một trang web (có thể truy cập tại http://dev.gkr33.com) được thiết kế cho điện thoại thông minh và cố gắng sử dụng api navigator.geolocation và lấy vị trí của bạn qua getCurrentPosition. Điều này dường như làm việc ban đầu, tuy nhiên nếu bạn cố gắng làm mới trang nó luôn luôn mang lại vị trí GPS cuối cùng. Tôi đã thêm một số thông tin gỡ lỗi trên trang mà lấy thời gian của sự trở lại getCurrentPosition và sau khi định vị ban đầu nó luôn luôn trả về cùng một thời gian (xuống đến mili giây).navigator.geolocation getCurrentPosition không cập nhật trong Chrome Mobile
Điều này dường như chỉ xảy ra trong Chrome Mobile. Nếu tôi duyệt qua các trang web thông qua trình duyệt Android chứng khoán nó hoạt động tốt mọi lúc.
Mã được hiển thị bên dưới;
<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>
Tôi đã phát xung quanh với các giá trị khác nhau cho giá trị cực đại và thời gian chờ, nhưng dường như không ảnh hưởng đến cùng giá trị vị trí và giá trị vị trí.
Tôi nghĩ có thể có vấn đề với Chrome Mobile, nhưng tôi không muốn giả sử quá nhiều vào thời điểm này và chỉ cần làm rõ rằng tôi đã không mắc sai lầm về tỷ lệ muppet trong mã của tôi.
Rất cám ơn vì bất kỳ trợ giúp nào bạn có thể cung cấp.
CẬP NHẬT: Tôi cho rằng tôi nên nói rằng tôi đã thử nghiệm điều này trên hai thiết bị Android; HTC One X + và Samsung Galaxy Tab 7.7 có cùng kết quả. Trên cả trình duyệt chứng khoán hoạt động tốt và cả Chrome đều không làm mới vị trí. Sẽ thử nghiệm trên Thiết bị Apple sau :)