Есть ли способ определить, предоставил ли пользователь разрешение на использование navigator.geolocation?

Помимо установки cookie в первый раз, существует ли способ определить, предоставил ли пользователь разрешение для navigator.geolocation, чтобы вернуть lat/long браузера?

Если есть, что это такое и одинаково для всех браузеров или разных во всех браузерах?

Этот вопрос был частично ответил в другом месте

В соответствии с GeoLocation API - Chrome/Safari - Управление разрешениями и визуальные различия, Chrome запрашивает отменное одноразовое разрешение. Я не закончил читать статью, но, похоже, хранение разрешений не является чем-то вроде Chrome.

Ответы

Ответ 1

Как насчет использования localStorage, который должен поддерживаться всеми браузерами html5 (которые поддерживают геолокацию)

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(successFunction, errorFunction);
} 
//Get latitude and longitude;
function successFunction(position) {
    var lat = position.coords.latitude;
    var long = position.coords.longitude;

    localStorage['authorizedGeoLocation'] = 1;
}

function errorFunction(){
    localStorage['authorizedGeoLocation'] = 0;
}

function checkauthorizedGeoLocation(){ // you can use this function to know if geoLocation was previously allowed
    if(typeof localStorage['authorizedGeoLocation'] == "undefined" || localStorage['authorizedGeoLocation'] == "0" ) 
        return false;
    else 
        return true;
}

И затем вы проверяете использование следующей функции:

alert(checkauthorizedGeoLocation());

Это jsfiddle, если вам нужно проверить

Ответ 2

В соответствии с spec, нет - только три метода на navigator.geolocation. Однако сохранение в cookie или локальном хранилище, вероятно, идеально подходит - разрешение также сохраняется в пользовательском агенте, поэтому оно должно работать правильно, когда пользователь перемещается между браузерами.