HTML 5 Geo Location Prompt в Chrome
Просто начинаю изучать HTML 5 и тестировать географическое местоположение... пока что мне нравится. Хотя я немного ударил по скорости... когда я пытаюсь определить свое географическое местоположение, Chrome автоматически блокирует страницу от определения моего местоположения. Это не происходит на других сайтах, таких как сайт ниже:
Скрипты, которые я использую:
<script type="text/javascript" JavaScript" SRC="geo.js"></script>
<script type="text/javascript" JavaScript" SRC="Utility.js"></script>
<script type="text/javascript" JavaScript" SRC="jquery.js"></script>
<script type="text/javascript" JavaScript" SRC="modernizr.js"></script>
function get_location() {
if (geo_position_js.init()) {
geo_position_js.getCurrentPosition(show_map, handle_error);
}
}
function show_map(position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
alert("lat:" + latitude + " long:" + longitude);
}
function handle_error(err) {
alert(err.code);
if (err.code == 1) {
// user said no!
}
}
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(show_map, handle_error);
} else {
error('not supported');
}
Я тестирую это из локального каталога на моей машине, поэтому на самом деле нет такого "домена", как "http://whwhat.com/mytestpage.html". Поэтому я не получаю подсказку? Если да, то можно ли заставить браузер запрашивать разрешение на получение географического местоположения пользователя, и возможно ли это в моем сценарии?
9 ответов
В Chrome есть какое-то ограничение безопасности для использования геолокации из file:///
URI, хотя, к сожалению, он не записывает никаких ошибок, чтобы указать на это. Он будет работать с локального веб-сервера. Если у вас установлен python, попробуйте открыть командную строку в каталоге, где находятся ваши тестовые файлы, и введите команду:
python -m SimpleHTTPServer
Он должен запустить веб-сервер через порт 8000 (может быть что-то еще, но он сообщит вам в консоли, какой порт он слушает), а затем перейдите по http://localhost:8000/mytestpage.html.
Если у вас нет python, в Ruby есть эквивалентные модули или Visual Web Developer Express поставляется со встроенным локальным веб-сервером.
Ничто из вышеперечисленного не помогло мне.
После небольшого исследования я обнаружил, что начиная с M50 (апрель 2016 года) - для Chrome теперь требуется безопасный источник (например, HTTPS) для геолокации.
Устаревшие возможности небезопасных источников
Хост "localhost" является специальным, поскольку он "потенциально безопасен". Вы можете не увидеть ошибок во время разработки, если вы развертываете на своей машине разработки.
Как уже упоминалось в ответе Роберта, Chrome блокирует определенные функции, такие как географическое положение с локальными файлами. Более простой альтернативой настройке собственного веб-сервера было бы просто запустить Chrome с параметром --allow-file-access-from-files
, Затем вы можете использовать географическое положение, если вы не отключили его в своих настройках.
Самый простой способ - нажать на область слева от адресной строки и изменить там настройки местоположения. Это позволяет устанавливать параметры местоположения даже для file:///
Убедитесь, что он не заблокирован в ваших настройках
http://www.howtogeek.com/howto/16404/how-to-disable-the-new-geolocation-feature-in-google-chrome/
Если вы используете хостинг за сервером и по-прежнему сталкиваетесь с проблемами: попробуйте изменить localhost на 127.0.0.1, например http://localhost:8080/ на http://127.0.0.1:8080/
Проблема, с которой я столкнулся, заключалась в том, что я обслуживал сайт, используя Apache Tomcat в Eclipse IDE (eclipse luna).
Для проверки работоспособности я использовал демонстрацию Реми Шарпа: https://github.com/remy/html5demos/blob/eae156ca2e35efbc648c381222fac20d821df494/demos/geo.html
и получал сообщение об ошибке после внесения незначительных изменений в функцию ошибки, несмотря на то, что размещал код на сервере (работал только в Firefox и не работал в Chrome и Safari):
"Пользователь отказал в геолокации"
Я сделал следующее изменение, чтобы получить более подробное сообщение об ошибке:
function error(msg) {
var s = document.querySelector('#status');
msg = msg.message ? msg.message : msg; //add this line
s.innerHTML = typeof msg == 'string' ? msg : "failed";
s.className = 'fail';
// console.log(arguments);
}
сбой в Internet Explorer за виртуальной коробкой IE10 на http://10.0.2.2:8080/:
"Текущее местоположение не может быть определено"
Для простого обхода просто скопируйте файл HTML в какой-либо общий ресурс, например Dropbox, и используйте общую ссылку в своем браузере. Легко.
Проверьте настройки Google Chrome и разрешите доступ к местоположению
Change your default location settings.
On your computer, open Chrome.
At the top right, click More Settings.
Under "Privacy and security," click Site settings.
Click Location.
Turn Ask before accessing on or off.
После того, как я изменил эти настройки, у меня заработала геолокация.
У меня тоже была эта проблема, когда я пробовал Gelocation API. Затем я запустил IIS Express через Visual Studio, а затем зашел на страницу, и она работала без проблем во всех браузерах.