已允许位置权限,调用Geolocation API仍报Permission was revoked错误求助
问题排查与解决方案
1. 修复代码中的事件参数错误
你的点击回调函数没有接收event参数,导致event.preventDefault()会抛出ReferenceError,中断后续的地理定位请求,这很可能是你看到"Permission was revoked"错误的核心原因。修改后的代码如下:
askLocation.addEventListener("click", (event) => { // 补充event参数 event.preventDefault(); if (navigator.geolocation) { navigator.geolocation.getCurrentPosition( (position) => { const pos = { lat: position.coords.latitude, lng: position.coords.longitude, }; console.log(pos); }, (e) => { // 打印详细错误信息,便于精准排查 console.log(`错误代码:${e.code},错误消息:${e.message}`); console.log("error"); } ); } else { console.log("无法访问你的位置"); } });
2. 验证浏览器权限的实际状态
即便你手动设置了允许,也可以通过代码确认当前权限状态,在点击事件外添加以下代码:
navigator.permissions.query({ name: 'geolocation' }).then(permissionStatus => { console.log('当前地理定位权限状态:', permissionStatus.state); // 监听权限变化,实时掌握状态更新 permissionStatus.addEventListener('change', () => { console.log('权限状态变更为:', permissionStatus.state); }); });
如果输出为granted,说明权限确实处于允许状态;如果是denied或prompt,则需要重新在浏览器设置中开启权限。
3. 确保阻止a标签默认跳转
event.preventDefault()必须正确执行,阻止a标签的页面跳转行为——一旦页面刷新,正在进行的地理定位请求会被强制终止,也可能触发类似"权限被撤销"的错误提示。
内容的提问来源于stack exchange,提问作者Zenlyn
相关产品推荐
相关产品推荐

