Foros del Web » Programando para Internet » Javascript »

Geolocalización HTML5

Estas en el tema de Geolocalización HTML5 en el foro de Javascript en Foros del Web. Hola a todos, deseo resolver la siguiente pregunta, agradezco de antemano sus aportes: ¿Cómo hago para que el navegador pida solamente una vez el permiso ...
  #1 (permalink)  
Antiguo 17/11/2013, 19:26
 
Fecha de Ingreso: octubre-2013
Mensajes: 2
Antigüedad: 11 años, 2 meses
Puntos: 0
Busqueda Geolocalización HTML5

Hola a todos, deseo resolver la siguiente pregunta, agradezco de antemano sus aportes:

¿Cómo hago para que el navegador pida solamente una vez el permiso para detectar la ubicación?, lo que pasa es que con setInterval ubico cada 10 segundos la ubicación pero en cada ocasión el navegador vuelve a pedir permiso. Esta es la función:

setInterval(ubica, 10000);
function ubica(){
navigator.geolocation.getCurrentPosition(showPosit ion);
function showPosition(position) {
alert("Latitude: " + position.coords.latitude + "<br>Longitude: " + position.coords.longitude);
}
}

Saludos
  #2 (permalink)  
Antiguo 19/11/2013, 08:26
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 20 años, 3 meses
Puntos: 56
Respuesta: Geolocalización HTML5

Holas, CarlosJJ.

Guarda en una variable booleana global un verdadero indicando que ya has hecho la primera consulta. Luego, sólo la vuelves a hacer si la variable está en falso, lo que en teoría no ocurrirá a menos que se recargue la página.

No sé si sea algo así lo que quieres, pero es para mostrar la idea:

Código javascript:
Ver original
  1. var PermisoOK = false;
  2. setInterval(ubica, 10000);
  3.  
  4. function ubica()
  5. {
  6.  navigator.geolocation.getCurrentPosition(showPosition);
  7.  
  8.  if (!PermisoOK)
  9.  {
  10.   function showPosition(position) {
  11.    alert("Latitude: " + position.coords.latitude + "<br>Longitude: " + position.coords.longitude);
  12.   }
  13.   PermisoOK = true;
  14.  }
  15. }

Saludos!
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #3 (permalink)  
Antiguo 19/11/2013, 08:42
txemaarbulo
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Geolocalización HTML5

Hola Carlos:

Con el código que presentas, el setInterval(ubica, 10000); recarga la página cada 10 segundos. Es normal que, a menos que el navegador te de la opción de aceptar la geocolalización para "esta página, siempre", te la vuelva a pedir. Es normativo y ajustado al derecho de privacidad del usuario.

Geolocalización W3C (ver Geolocalización API Especificación) te permite dos formas de acceso, con los parámetros correspondientes:
El primero, el que estás usando (getCurrentPosition), es:
Código Javascript:
Ver original
  1. navigator.geolocation.getCurrentPosition(successCallback, errorCallback,{maximumAge:10000});

maximumAge:10000 le está diciendo al código "Si el agente de usuario no tiene un fresco mayor que 10 segundos" (es decir, que no la hayas pedido antes de 10 segundos Lo normal sería:
Código Javascript:
Ver original
  1. var PositionOptions = {
  2.     timeout: 600000,
  3.     maximumAge: 50000,
  4.     enableHighAccurace: true
  5. };
  6. navigator.geolocation.getCurrentPosition(successCallback, errorCallback, PositionOptions);

timeout: 5000, es el tiempo de espera (5 segundos) antes de lanzar errorCallback, si no encuentra la posición. Y ahora he extendido a que no la hayas pedido en los 10 minutos anteriores.

Lo que tu estás queriendo hacer es que repita la posición "actual" sin la correspondiente reiteración de autorización. En este caso acudimos a watchPosition para iniciar la geolocalización y clearWatch para detenerla.
Código Javascript:
Ver original
  1. navigator.geolocation.watchPosition(successCallback, errorCallback);
  2. navigator.geolocation.clearWatch(watchId);

En este caso, reiterará la nueva posición siempre que verifique un cambio de la misma

Todo ello dentro de variables e invocación de funciones como se indica en el API.

Etiquetas: geolocalización, html5
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:44.