Test if html5 geolocation permission already has been granted

后端 未结 3 676
时光取名叫无心
时光取名叫无心 2021-01-02 23:22

Does anyone know if there is a way to test if prior html5 geolocation permission has been granted?

I try to make a script that does not request the geolocation unles

相关标签:
3条回答
  • 2021-01-02 23:36

    The first part actually answers your question, at least on Chrome 43+ and Firefox 46+ (see https://developer.mozilla.org/en-US/docs/Web/API/Permissions_API):

    navigator.permissions &&
    navigator.permissions.query({name: 'geolocation'}).then(function(PermissionStatus) {
        if('granted' === PermissionStatus.state) {
            navigator.geolocation.getCurrentPosition(function(geoposition) {
                console.log(geoposition) /* You can use this position without prompting the user if the permission had already been granted */
            })
        }
    })
    
    0 讨论(0)
  • 2021-01-02 23:55

    According to the Geolocation API Specification there isn't any function for this. Even the option to save it in the browser preferences isn't pushed to your code.

    If it's realy important and you realy have to beeing aware of this, you have to write a browser addon for every common browser and ask the user to install it. But i wouldn't doubt of it.

    0 讨论(0)
  • 2021-01-02 23:55

    Best you can do is to keep track of this yourself...

    // In chrome you can now do this    
    navigator.permissions.query({name: 'geolocation'}).then(function(PermissionStatus){
        console.log(PermissionStatus.state) // prompt, granted, denied
        // even listen for changes
        PermissionStatus.onchange = function(){
            console.log(this.state)
        }
    })
    

    fallback method:

    // initialization
    if( sessionStorage.getItem("geo_access") === null ){
        // just assume it is prompt
        sessionStorage.setItem("geo_access", "prompt");
    }
    
    function ask(){
        navigator.geolocation.getCurrentPosition(function(){
            sessionStorage.setItem("geo_access", "granted");
    
        }, function(err){
            if(err.code == 1){ // PERMISSION_DENIED
                sessionStorage.setItem("geo_access", "denied");
            }
            sessionStorage.setItem("geo_access", "prompt");
        });
    };
    
    // Then somewhere
    ask();
    
    0 讨论(0)
提交回复
热议问题