navigator.getCurrentPosition () не работает ни в Firefox, ни в Safari - PullRequest
0 голосов
/ 06 марта 2019

Кажется, я не могу заставить navigator.getLocation () работать на Firefox 65 или Safari 10

function getLocation(user_radius) {

var geo_options = {
enableHighAccuracy: true, 
maximumAge        : 30000, 
timeout           : 27000
};

function error(err) {
console.warn('Cannot load user location. Make sure you gave permission to share location');
}

document.body.style.position = "absolute";

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function (position) {

        lat0 = position.coords.latitude;
        long0 = position.coords.longitude;
        corefunction(user_radius);
    },error,geo_options);
} else {
    x.innerHTML = "Geolocation is not supported by this browser.";
}
}

Хотя Firefox запрашивает доступ к местоположению, а Safari - нет, ни один из них не возвращает широту и долготу. Журнал Firefox и Safari:

*Cannot load user location. Make sure you gave.....*

что я делаю не так?

Да, я дал разрешения, и да, в обоих случаях включены службы определения местоположения. Код прекрасно работает в Opera, Chrome, IE и Edge ...

Любопытно, что я не могу получить свое местоположение с помощью этого браузера даже на сторонних страницах:

https://www.w3schools.com/html/tryit.asp?filename=tryhtml5_geolocation https://developer.mozilla.org/en-US/docs/Web/API/Geolocation_API

UPDATE # 1 Я попытался предложить Стивену добавить navigator.permission; это фрагмент, который я запустил, чтобы проверить, работает ли он в Firefox.

   function handlePermission() {
  navigator.permissions.query({name:'geolocation'}).then(function(result) {
  if (result.state == 'granted') {
  report(result.state);
  geoBtn.style.display = 'none';
} else if (result.state == 'prompt') {
  report(result.state);
  geoBtn.style.display = 'none';
  navigator.geolocation.getCurrentPosition(function (position) {

        lat0 = position.coords.latitude;
        long0 = position.coords.longitude;

    },error,geo_options);
} else if (result.state == 'denied') {
  report(result.state);
  geoBtn.style.display = 'inline';
}
result.onchange = function() {
  report(result.state);
}
});
}

Консоль выдает «prompt», но getCurrentPosition () не выполняется.

1 Ответ

2 голосов
/ 08 марта 2019

Хорошо, я нашел, в чем проблема, и это были OSX и iOS.Firefox и Safari при работе в этих браузерах нуждаются в службах определения местоположения, выделенных из Finder-> apple-> Системные настройки-> Безопасность и конфиденциальность-> Конфиденциальность, а затем добавьте Firefox и Safari в белый список

. По какой-то причине Chrome настраиваетсам в белый список после того, как вы согласились поделиться местоположение в браузере.То же самое для Opera.

Следовательно, в двух словах, проблема заключалась в том, что система конфиденциальности Apple была немного запутанной.Товары и плохие вещи, которые я полагаю

...