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

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

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

эту тему частично ответил в другом месте

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

3 ответов


Как насчет использования 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, если вам нужно проверить


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


см. этот ответ о том, как это сделать с помощью API разрешений: проверьте, если геолокация была разрешена и получить Lat Lon

работает без запроса пользователя, если разрешение было ранее предоставлено.