如果在未能获取到用户的地理位置信息时,过一段时间后再次询问,在错误处理函数中使用setTimeout
来实现。:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>地理定位示例</title>
<script>
function askForLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition, showError);
} else {
alert("抱歉,您的浏览器不支持地理定位。");
}
}
function showPosition(position) {
const latitude = position.coords.latitude;
const longitude = position.coords.longitude;
alert("纬度: " + latitude + "\n经度: " + longitude);
}
function showError(error) {
switch (error.code) {
case error.PERMISSION_DENIED:
alert("用户拒绝了地理位置请求。");
break;
case error.POSITION_UNAVAILABLE:
alert("当前位置不可用。");
break;
case error.TIMEOUT:
alert("请求超时。");
break;
case error.UNKNOWN_ERROR:
alert("发生了未知错误。");
break;
}
// 在错误发生后,设置一个定时器重新询问位置
setTimeout(askForLocation, 10000); // 10秒后重新询问
}
window.onload = () => {
// 页面加载后请求地理位置
askForLocation();
};
</script>
</head>
<body>
<h1>地理定位示例</h1>
<p>如果获取定位失败,将在10秒后重新询问。</p>
</body>
</html>
代码说明:
- askForLocation函数:请求用户的地理位置。
- showPosition函数:处理成功获取的位置信息,并显示纬度和经度。
- showError函数:处理获取位置时的错误。在每种错误情况下,都会显示相应的错误信息。
- 定时重新询问:在
showError
函数中,使用setTimeout
设置一个定时器,在10秒后再次调用askForLocation
函数。这意味着如果获取位置失败,系统会在10秒后再次尝试获取用户的地理位置。 - 页面加载时执行:
window.onload
事件确保在页面加载完成后开始询问位置。