Navigator.geolocation.getCurrentPosition Обратные вызовы не будут работать в Firefox 10
Хорошо, поэтому я создаю приложение, использующее API геолокации. Кажется, у меня нет очень простой части кода для работы с Firefox 10. Вот код:
window.onload = function() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
alert('it works');
}, function(error) {
alert('Error occurred. Error code: ' + error.code);
});
}else{
alert('no geolocation support');
}
};
Итак, например, в chrome, после запуска страницы мне будет предложено, хочу ли я поделиться своим местоположением, и после нажатия "да" он предупредит меня, что "он работает". Теперь в Firefox 10 он попросит меня поделиться своим местоположением и после нажатия поделиться им ничего не делает... Я пытался получить обратный вызов для запуска любого типа кода, но не повезло. Это ошибка с Firefox или я что-то не так? У меня есть пример кода для тестирования: http://dev-hub.com/geolocation.html.
Изменить ---
Моя ОС - Windows 7 64bit
Ответы
Ответ 1
Хорошо, я обнаружил, что проблема действительно в Firefox и что она не работает надежно или одинаково на всех платформах. Глядя на http://dev.w3.org/geo/api/spec-source.html Я нашел следующий вариант для добавления:
window.onload = function() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
alert('it works');
}, function(error) {
alert('Error occurred. Error code: ' + error.code);
},{timeout:5000});
}else{
alert('no geolocation support');
}
};
Как вы можете видеть здесь, был добавлен тайм-аут: 5000, что означает, что если по какой-то причине браузер занимает более 5000 мс (5 секунд), то выдаст ошибку тайм-аута (код ошибки 3). Итак, теперь, когда Firefox не работает, он хотя бы запускает обратный вызов ошибки, и я получаю сообщение с предупреждением "Ошибка произошла. Код ошибки: 3".
По-видимому, значение по умолчанию для тайм-аута бесконечно, поэтому он никогда не выйдет из строя... Chrome на 100% надежный, но Firefox на 10% надежнее на моей машине, что очень неутешительно. На моем другом компьютере, который работает с Windows XP и находится в одной сети, Firefox, кажется, на 100% надежнее.
Ответ 2
Я сделал этот пример для вас:
if(!navigator.geolocation){
alert('El Navegador no soporta GeoLocalización');
}
function doGeo( position )
{
var coords = position.coords.latitude + '+' + position.coords.longitude;
var url = 'https://maps.google.es/?q=' + coords;
$( "#lat" ).html("Latitud: " + position.coords.latitude );
$( "#lon" ).html("Longitud: " + position.coords.longitude );
$( "#acc" ).html("Precisión: " + position.coords.accuracy );
$( "#alt" ).html("Altitud: " + position.coords.speed );
var link = '<a class="btn btn-primary" href="' + url + '" target="_blank">Ir a la Ubicación en Google Maps</a>';
$(link).appendTo('#GoogleMaps');
}
function lost()
{
alert('Algo salió mal, Intentelo más tarde...');
};
navigator.geolocation.watchPosition(doGeo, lost, {maximumAge:0,enableHighAccuracy:true} );
http://jsfiddle.net/aA2zv/35/
надеюсь, что это поможет!