Вопрос по javascript, geolocation, html5 – Проверьте, было ли уже предоставлено разрешение на геолокацию html5

3

Кто-нибудь знает, есть ли способ проверить, было ли предоставлено предварительное разрешение на геолокацию html5?

Я пытаюсь создать скрипт, который не запрашивает геолокацию, если разрешение на страницу уже не было дано. Не обязательно должен быть html5; другие рамки тоже в порядке.

Как насчет сохранения результата первоначальной попытки получить местоположение? alex
Я никогда не хочу быть тем, кто просит разрешения в первую очередь. Это 3-й участник сценария ... RickyA

Ваш Ответ

3   ответа
1

// 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)
    }
})

резервный метод:

// 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();
Смотрите второй комментарий на вопрос: я не могу контролировать предыдущий (или нет) звонок. RickyA
0

СогласноСпецификация API геолокации для этого нет никакой функции. Даже возможность сохранить его в настройках браузера не добавляется в ваш код.

Если это действительно важно, и вы действительно должны знать об этом, вы должны написать аддон для каждого обычного браузера и попросить пользователя установить его. Но я бы не сомневался в этом.

4

по крайней мере, на Chrome 43+ и Firefox 46+ (см.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 */
        })
    }
})

Похожие вопросы