必须满足HTTPS、用户授权、系统定位开启三前提才能获取经纬度;getCurrentPosition()需同时传success和error回调,error.code含PERMISSION_DENIED等4值,timeout应设为10000,enableHighAccuracy和maximumAge影响精度与实时性,accuracy值决定坐标可用性。

能直接拿到经纬度,但必须满足 HTTPS、用户授权、系统定位开启三个前提;不处理错误或忽略参数配置,大概率在真实设备上失败。
getCurrentPosition() 必须传 success + error 回调
只写成功回调是常见错误,getCurrentPosition() 在权限拒绝、超时、GPS不可用等场景下一定会进 error 分支,不处理就会静默失败。
-
error.code有四个固定值:PERMISSION_DENIED(用户点“不允许”)、POSITION_UNAVAILABLE(比如飞行模式)、TIMEOUT(默认无限等待,实际常卡住)、UNKNOWN_ERROR - 移动端 Safari 对
TIMEOUT特别敏感,建议显式设为10000(10 秒) - 不要只 alert 提示,应降级到 IP 定位或手动输入入口
options 参数直接影响坐标可用性
不传 options 或乱设参数,拿到的坐标可能是缓存的、低精度的,甚至根本不是当前设备位置。
-
enableHighAccuracy: true强制启用 GPS(Android/iOS 生效),但会延长获取时间、增加电量消耗;设为false时可能只返回 Wi-Fi 或基站粗略坐标 -
timeout: 10000必须设,否则 iOS Safari 可能永远不触发 error 回调 -
maximumAge: 0表示禁用缓存,避免返回几小时之前的旧坐标;若设为60000,则接受 1 分钟内缓存的位置
坐标顺序和精度字段容易被忽略
浏览器返回的 position.coords 是标准对象,但很多开发者只取 latitude 和 longitude,漏掉关键质量信息。
立即学习“前端免费学习笔记(深入)”;
- 顺序固定为
latitude(纬度)、longitude(经度),高德/百度地图 SDK 要求的是[lng, lat]数组,传错会导致标记偏移到赤道附近 -
accuracy单位是米,值为25表示定位误差半径约 25 米;若大于100,说明当前定位不可靠,不宜用于签到、导航等强依赖场景 -
altitude和speed在部分设备上为null,不能假设一定存在
真实环境中,getCurrentPosition() 返回的坐标只是起点;是否可用,得看 accuracy 值、是否在有效缓存期内、以及用户是否真开了 GPS —— 这些都得在 success 回调里判断,不能只打印 console.log。



















