2012-04-09 13 views
9

Estoy construyendo un pequeño script que los clientes instalarán en su página. La geolocalización no es necesaria, sin embargo, si existe, sería bueno tenerla. ¿Hay alguna manera de que compruebe si la página de clientes ha solicitado información de geolocalización y si el usuario seleccionado permite obtener el lat & lon sin crear otro mensaje?Verificar si se permitió la geolocalización y obtener Lat Lon

Respuesta

12

No es posible con la API de geolocalización pero es posible con la nueva API de autorización

Este código es útil si quieres probar para recibir las coordenadas, pero no quiere molestar al usuario con una primo de diálogo del sistema las coordenadas no es tan importante y puede así vuelve a los geoip

function getCoords(){ 
    return new Promise((resolve, reject) => 

     navigator.permissions ? 

     // Permission API is implemented 
     navigator.permissions.query({name:'geolocation'}).then(permission => 
      // is geolocation granted? 
      permission.state === "granted" 
      ? navigator.geolocation.getCurrentPosition(pos => resolve(pos.coords)) 
      : resolve(null), 
     reject) : 

     // Permission API was not implemented 
     reject(new Error("Permission API is not supported")) 
    ) 
} 

getCoords().then(coords => console.log(coords)) 

Esto se resolverá como nulo si el permiso no se ha concedido, lanzar un error si algún código javascript no fue apoyado por el navegador y resolver a las coordenadas si se ha concedido

+2

Este es un enfoque útil pero, dado que es una API bastante nueva, es importante mencionar los posibles problemas de compatibilidad. Por ejemplo: http://caniuse.com/#feat=permissions-api – Mario

5

Puede detectar si la característica existe al examinar el objeto de la ventana.

if('geolocation' in window){ 
    navigator.geolocation.getCurrentPosition(...); 
} 

Esto hará que un solo mensaje para el usuario para llegar a preguntar al usuario si desea compartir su ubicación con su página.

Si la geolocalización no está disponible en el navegador, esto no se ejecutará en absoluto.


EDITAR Si ya has pedirá al usuario en esta página carga para permitir el acceso de geolocalización, que no le pedirá de nuevo. Si el usuario navega y regresa a esta página, se volverá a solicitar.

Puede realizar llamadas posteriores a la API sin preguntar durante esa sesión de página.

Referencia: MDN Geolocation -- Watching the current position

+0

No creo que le importe si el navegador lo admite o no: quiere saber si, en caso de que el navegador lo admita, puede llamar a 'getCurrentPosition()' * sin * un aviso porque el sitio ya ha provocado tal aviso antes de. – ThiefMaster

+0

@ThiefMaster. Eso no es un voto negativo a menos que haya hecho la pregunta. La intención de la pregunta no es clara. En ese caso, sin embargo, consulte mi actualización. – tkone

+0

@TheifMaster es correcto – Stefan

4

De acuerdo con la API no es posible averiguar de que el usuario ya ha permitido el sitio actual para recuperar la ubicación del usuario sin causar la petición, si no lo ha hecho. See Endless answer

Le sugiero que permita a los usuarios pasar un argumento al incrustar el script diciéndole si debe usar funciones de geolocalización o no.

2

El hecho de que se le solicite o no parece depender del navegador y de la configuración de 'privacidad' que tenga. Safari 6 tiene 3 configuraciones: solicitar una vez por sitio, solicitar una vez por sitio por día y denegar. Chrome 23 tiene 3 configuraciones: permite todo, pregunta y niega todo. Claro que sería bueno si hubiera una manera de verificar si ya está permitido sin molestar al usuario.

Cuestiones relacionadas