validacion - validar formulario javascript onclick
¿Hay alguna manera de comprobar si la geolocalización se ha REDUCIDO con Javascript? (4)
Arreglar el problema de Firefox es realmente fácil. En mi caso, guardo la geolocalización en una variable global en Javascript llamada geolocalización. Antes de usar esta variable, solo compruebo si no está indefinido, si es así solo obtengo la geolocalización desde la IP.
En mi sitio web no tengo ningún problema para obtener la ubicación la primera vez, pero vi en mi breve ejemplo que nunca tiene tiempo para obtener la geolocalización por primera vez porque es demasiado rápido.
De todos modos, esto es solo un ejemplo, debes adaptarlo en cada caso.
var geolocation = {};
getLocation();
$(document).ready(function(){
printLocation(); // First time, hasn''t time to get the location
});
function printLocation(){
if(typeof geolocation.lat === "undefined" || typeof geolocation.long === "undefined"){
console.log("We cannot get the geolocation (too fast? user/browser blocked it?)");
// Get location by IP or simply do nothing
}
else{
console.log("LATITUDE => "+geolocation.lat);
console.log("LONGITUDE => "+geolocation.long);
}
}
function getLocation() {
// If the user allow us to get the location from the browser
if(window.location.protocol == "https:" && navigator.geolocation)
navigator.geolocation.getCurrentPosition(function(position){
geolocation["lat"] = position.coords.latitude;
geolocation["long"] = position.coords.longitude;
printLocation(); // Second time, will be return the location correctly
});
else{
// We cannot access to the geolocation
}
}
PD: No tengo suficiente reputación para comentar las respuestas anteriores, así que tuve que crear una nueva respuesta. Lo siento por eso.
Necesito JavaScript para mostrar una entrada manual si se rechaza la geolocalización.
Lo que he intentado:
Modernizr.geolocation
navigator.geolocation
Ninguno de los dos describe si el usuario ha rechazado anteriormente el acceso a la geolocalización.
Con la nueva API de permiso, está disponible como tal:
navigator.permissions.query({''name'': ''geolocation''})
.then( permission => console.log(permission) )
(solo funciona para Blink y Firefox)
De acuerdo con la especificación de geolocalización W3C, su llamada getCurrentPosition
puede devolver una devolución de llamada para el éxito y una devolución de llamada en caso de error. Sin embargo, su devolución de llamada por error se invocará por cualquier error que haya ocurrido, que es uno de: (0) desconocido; (1) permiso denegado; (2) posición no disponible; o (3) tiempo de espera. [ https://developer.mozilla.org/en/Using_geolocation ]
En tu caso, quieres hacer algo específico si el usuario ha denegado el acceso de forma explícita. Puede verificar el valor de error.code
en su devolución de llamada fallida, así:
navigator.geolocation.getCurrentPosition(successCallback,
errorCallback,
{
maximumAge: Infinity,
timeout:0
}
);
function errorCallback(error) {
if (error.code == error.PERMISSION_DENIED) {
// pop up dialog asking for location
}
}
watchPosition
y getCurrentPosition
aceptan una segunda devolución de llamada que se invoca cuando hay un error. La devolución de llamada de error proporciona un argumento para un objeto de error. Para el permiso denegado, error.code
sería error.PERMISSION_DENIED
(valor numérico 1
).
Lea más aquí: https://developer.mozilla.org/en/Using_geolocation
Ejemplo:
navigator.geolocation.watchPosition(function(position) {
console.log("i''m tracking you!");
},
function (error) {
if (error.code == error.PERMISSION_DENIED)
console.log("you denied me :-(");
});
EDITAR: como @Ian Devlin señaló, no parece que Firefox (4.0.1 en el momento de esta publicación) admita este comportamiento. Funciona como se esperaba en Chrome y probablemente Safari, etc.