Shi*_*hel 6 html javascript google-maps-api-3 w3c-geolocation cordova
是否有任何替代navigator.permissions.query 权限API查询,以检查geolocation许可。导致其仍在工作草案中,并且浏览器兼容性较差。
W3C权限参考: https : //www.w3.org/TR/permissions/
问题是,app resume一旦用户对本机权限弹出窗口执行操作,然后要检查action用户是否采取了该措施。
平台:移动Android
注意:不想使用cordova diagnostic plugin
例:
navigator.permissions.query({name:'geolocation'}).then(function(result) {
console.log('result : ', result);
});
Run Code Online (Sandbox Code Playgroud)
您可以直接使用,navigator.geolocation无需事先征得许可。它会像navigator.permissionsdo一样自动提出询问位置提示。
navigator.geolocation.getCurrentPosition(
(i)=>console.log('success',i),
(i)=>console.log('failed',i)
)
Run Code Online (Sandbox Code Playgroud)
navigator.permissions在 safari 和 edge 中不支持,但navigator.geolocation支持,所以我认为不检查许可就执行地理定位是安全的,因为它也会首先提高提示许可。
我不这么认为。
此时 navigator.permissions 对象未定义 - 可能是出于不将 Web 权限与 Android 权限混合的目的而在 WebView 中删除了它。
选项1:
您可以尝试Cordova 诊断插件,特别是getLocationAuthorizationStatus应以与 Permissions API 非常相似的方式返回权限状态的方法。请注意,我还没有尝试过该插件。
选项2:
通过请求位置触发位置权限对话框。当您收到带有常量代码的PositionErrorPERMISSION_DENIED时,这意味着用户拒绝了位置权限(刚才或在应用程序设置中)。
navigator.getCurrentPosition(
function(position) { /** won't be executed for such short timeout */ },
function(positionError) {
switch (positionError.code) {
// PERMISSION_DENIED
case 1:
console.log('Permission denied')
break
// POSITION_UNAVAILABLE
case 2:
console.log('Permission allowed, location disabled')
break
// TIMEOUT
case 3:
console.log('Permission allowed, timeout reached')
break
}
},
{timeout: 0}
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1815 次 |
| 最近记录: |