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/

надеюсь, что это поможет!