gpt4 book ai didi

google-chrome - navigator.geolocation getCurrentPosition 未在 Chrome Mobile 中更新

转载 作者:行者123 更新时间:2023-12-04 11:27:23 25 4
gpt4 key购买 nike

我创建了一个专为智能手机设计的网站(可以在 http://dev.gkr33.com 访问),并尝试使用 navigator.geolocation api 并通过 getCurrentPosition 获取您的位置。这似乎最初有效,但是如果您尝试刷新页面,它总是会带回最后的 GPS 位置。我在页面上添加了一些调试信息,它获取 getCurrentPosition 返回的时间,并且在初始定位后它总是返回相同的时间(低至毫秒)。

这似乎只发生在 Chrome Mobile 中。如果我通过股票 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 可能存在问题,但我现在不想假设太多,只需要澄清一下,我没有在我的代码中犯类似布偶的错误。

非常感谢您提供的任何帮助。

更新:我想我应该说我已经在两个 Android 设备上测试过了; HTC One X+ 和三星 Galaxy Tab 7.7 的结果相同。在两个股票浏览器上都可以正常工作,并且在两个 Chrome 上都不会刷新位置。稍后将在 Apple 设备上进行测试:)

最佳答案

我从来没有找到这个问题的根源,但我通过使用 watchPosition 找到了解决这个问题的方法。调用,并在清除 watchID 之前等待 5 秒等待.检查下面的代码:

var options = { enableHighAccuracy: true, maximumAge: 100, timeout: 50000 };
if( navigator.geolocation) {
var watchID = navigator.geolocation.watchPosition( gotPos, gotErr, options );
var timeout = setTimeout( function() { navigator.geolocation.clearWatch( watchID ); }, 5000 );
} else {
gotErr();
}

我目前还没有使用“选项”值或超时延迟,但是上面的代码在我尝试过的每个平台上都带回了准确的定位信息。

希望这可以帮助有同样问题的人:)

关于google-chrome - navigator.geolocation getCurrentPosition 未在 Chrome Mobile 中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13386996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com