Ich habe eine Website erstellt (erreichbar unter http://dev.gkr33.com), die für ein Smartphone entworfen wurde und versucht, die navigator.geolocation api zu verwenden und Ihre Position über getCurrentPosition zu erfassen. Dies scheint zunächst zu funktionieren, wenn Sie jedoch versuchen, die Seite zu aktualisieren, bringt es immer die letzte GPS-Position zurück. Ich habe einige Debug-Informationen auf der Seite hinzugefügt, die den Zeitpunkt der getCurrentPosition-Rückgabe abrufen und nach der anfänglichen Positionierung immer die gleiche Zeit (bis auf die Millisekunde) zurückgibt.navigator.geolocation getCurrentPosition wird nicht in Chrome Mobile aktualisiert
Dies scheint nur in Chrome Mobile passieren. Wenn ich über den Android-Browser in die Site blicke, funktioniert es jedes Mal einwandfrei.
Der Code ist unten gezeigt;
<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>
Ich habe um mit verschiedenen Werten für die maximumAge und Timeout, gespielt, aber nichts scheint die gleichen position.coords und position.time Werte zu beeinflussen.
Ich denke, es gibt vielleicht ein Problem mit Chrome Mobile, aber ich möchte jetzt nicht zu viel annehmen und brauche nur die Klarstellung, dass ich in meinem Code keinen Fehler von muppetartigen Proportionen gemacht habe.
Vielen Dank für Ihre Hilfe.
UPDATE: Ich denke, ich hätte sagen sollen, dass ich das auf zwei Android-Geräten getestet habe; HTC One X + und ein Samsung Galaxy Tab 7.7 mit dem gleichen Ergebnis. Auf beiden Seiten funktioniert der Browser gut und auf beiden Seiten wird die Position nicht aktualisiert. Will später auf einem Apple-Gerät testen :)