Geolocation API 需 HTTPS(或 localhost)、用户显式授权、用户交互触发及设备定位能力;调用 getCurrentPosition 时需处理权限拒绝、位置不可用、超时等错误,并推荐引导式触发与降级方案。
使用 Geolocation API 获取用户地理位置,核心是调用 navigator.geolocation.getCurrentPosition() 方法,但它必须在安全上下文(HTTPS 或 localhost)中运行,且需用户明确授权。
Geolocation API 不是默认开启的,浏览器会严格校验以下几点:
localhost 是例外;推荐写法包含成功回调、失败回调和可选配置项:
function getLocation() {
if (!navigator.geolocation) {
console.log("浏览器不支持 Geolocation API");
return;
}
const options = {
enableHighAccuracy: true, // 尝试获取更精准位置(可能更慢、更耗电)
timeout: 10000, // 最长等待 10 秒
maximumAge: 60000 // 接受 60 秒内缓存的位置
};
navigator.geolocation.getCurrentPosition(
(position) => {
const { latitude, longitude } = position.coords;
console.log("纬度:", latitude, "经度:", longitude);
},
(error) => {
switch (error.code) {
case error.PERMISSION_DENIED:
console.log("用户拒绝了位置请求");
break;
case error.POSITION_UNAVAILABLE:
console.log("位置信息不可用(如 GPS 未启动)");
break;
case error.TIMEOUT:
console.log("请求超时");
break;
default:
console.log("未知错误:", error.message);
}
},
options
);
}
浏览器对自动弹窗敏感,建议按以下方式提升授权成功率:
getCurrentPosition;navigator.permissions.query({name:'geolocation'}) 预判是否已拒绝,但兼容性有限(Chrome/F
irefox 支持较好);实际开发中容易踩坑的地方:
allow="geolocation" 属性;enableHighAccuracy,或返回精度极低的坐标;POSITION_UNAVAILABLE 或 PERMISSION_DENIED。