博客主页瑕疵的CSDN主页 Gitee主页瑕疵的gitee主页⏩ 文章专栏《热点资讯》定位API权限没开用户位置拿不到目录半夜三点用户又来问“为啥点‘获取位置’没反应”我打开控制台一看Permission denied。兄弟们这破事又来了权限没开位置拿不到。问题报错用户点击按钮浏览器直接报错Uncaught (in promise) DOMException: The request is not allowed或者Geolocation permission denied。不是代码写死了是权限没给。移动端尤其坑iOS/Android必须手动开权限。核心根源浏览器对定位API管得死紧。移动端iOS/Android权限在系统设置里不是在APP里。开发时我常犯两个错没检查浏览器是否支持定位没处理用户拒绝权限的情况结果用户点了按钮页面卡住一脸懵。解决代码先看错误写法// 错误示例直接调用没处理权限document.getElementById(getLocation).addEventListener(click,(){navigator.geolocation.getCurrentPosition((pos)console.log(pos),(err)console.error(err));});这段代码一跑用户拒绝权限就直接报错页面挂掉。正确写法// 正确示例先检查支持再请求权限document.getElementById(getLocation).addEventListener(click,(){// 1. 检查浏览器是否支持定位APIif(!navigator.geolocation){alert(你的浏览器不支持位置功能换个Chrome试试);return;}// 2. 请求权限处理成功/失败navigator.geolocation.getCurrentPosition((position){// 成功获取位置用坐标做点事console.log(纬度:,position.coords.latitude);console.log(经度:,position.coords.longitude);},(err){// 3. 处理权限拒绝if(err.codeerr.PERMISSION_DENIED){alert(需要位置权限请到手机设置里开启);}else{alert(位置获取失败重试一下);}},{enableHighAccuracy:true,timeout:5000}// 高精度5秒超时);});避坑总结移动端权限必须手动开iOS设置 隐私 位置 选“始终允许”Android设置 应用 位置权限 开启别指望用户自己知道写个提示“需要位置权限点这里开启”。拒绝权限要友好处理用户点了拒绝别死等。弹个提示“需要位置去设置里开下吧”。别像我上次用户拒绝后页面空白投诉电话打爆。测试时别用http本地开发用http://localhost但定位API要求HTTPS。用http-server -S -C cert.pem开个本地HTTPS测试。终极避坑每次调navigator.geolocation前先写if (!navigator.geolocation)。早检查少哭嚎。顺便提醒iOS 14 会弹权限弹窗别等用户点“允许”才处理。最后说句大实话定位API就这回事——权限没开位置拿不到。不是你代码烂是浏览器在耍你。记住用户拒绝了你得给路别卡在原地。写完这段我喝了口咖啡终于能睡了。