HTML5 Геолокация не запрашивает местоположение в браузере Safari - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь заставить Safari запросить у меня местоположение очень простым кодом. Я работаю на удаленном Macbook mini с моего P C под управлением Ubuntu. В среде Macbook приведенный ниже код прекрасно работает на Firefox и Chrome. Но на Safari ничего не происходит, я не получаю подсказку или ничего. Я получил sh Я получил какие-либо ошибки в консоли, но функция даже не срабатывает. Ничего не произошло. Нада. Кто-нибудь когда-либо сталкивался с такой проблемой?

Если я go и попробую здесь на W3Schools то же самое произойдет, что означает, что я нажимаю Попробовать, и ничего не происходит. Но он отлично работает во всех других браузерах.

код

<!DOCTYPE html>
<html>
<body>

<p>Click the button to get your coordinates.</p>

<button onclick="getLocation()">Try It</button>

<p id="demo"></p>

<script>
var x = document.getElementById("demo");

function getLocation() {
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(showPosition);
  } else { 
    x.innerHTML = "Geolocation is not supported by this browser.";
  }
}

function showPosition(position) {
  x.innerHTML = "Latitude: " + position.coords.latitude + 
  "<br>Longitude: " + position.coords.longitude;
}
</script>

</body>
</html>

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Go в Finder -> Apple -> Системные настройки -> Безопасность и конфиденциальность -> Конфиденциальность, затем добавьте Safari в белый список. Попробуйте, если это работает.

или

В Safari выберите Safari> «Настройки». Нажмите значок конфиденциальности в окне настроек. Снимите флажок «Запретить без запроса».

0 голосов
/ 20 апреля 2020

Я решил свою проблему, обработав ошибки. Для работы Safari и ios требуется обработка ошибок.

Это работает:

<!DOCTYPE html>
<html>
<body>

<p>Click the button to get your coordinates.</p>

<button onclick="getLocation()">Try It</button>

<p id="demo"></p>

<script>
var x = document.getElementById("demo");

function getLocation() {
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(showPosition, showError);
  } else { 
    x.innerHTML = "Geolocation is not supported by this browser.";
  }
}

function showPosition(position) {
  x.innerHTML = "Latitude: " + position.coords.latitude + 
  "<br>Longitude: " + position.coords.longitude;
}

function showError(error) {
  switch(error.code) {
    case error.PERMISSION_DENIED:
      x.innerHTML = "User denied the request for Geolocation."
      break;
    case error.POSITION_UNAVAILABLE:
      x.innerHTML = "Location information is unavailable."
      break;
    case error.TIMEOUT:
      x.innerHTML = "The request to get user location timed out."
      break;
    case error.UNKNOWN_ERROR:
      x.innerHTML = "An unknown error occurred."
      break;
  }
}
</script>

</body>
</html>
...