HTML 5 Geo Location Prompt в Chrome
Просто начинаю входить в HTML 5 и тестировать геолокацию... до сих пор это нравится. Я немного ударяю по скорости, хотя... когда я пытаюсь получить свое гео-местоположение, хром автоматически блокирует страницу от получения моего местоположения. Это не происходит на других сайтах, таких как сайт ниже:
http://html5demos.com/geo
Сценарии, которые я использую:
<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://whatever.com/mytestpage.html". Вот почему я не получаю подсказки? Если да, возможно ли заставить browswer запросить разрешение на получение географического местоположения пользователя и возможно ли это в моем сценарии?
Ответы
Ответ 1
В Chrome используется какое-то ограничение безопасности для использования геолокации из URI file:///
, хотя, к сожалению, он не записывает никаких ошибок, чтобы указать на это. Он будет работать с локального веб-сервера. Если у вас установлен python, попробуйте открыть командную строку в каталоге, где находятся ваши тестовые файлы, и выдает команду:
python -m SimpleHTTPServer
Он должен запустить веб-сервер на порту 8000 (может быть, что-то еще, но он скажет вам в консоли, какой порт он прослушивает), затем перейдите к http://localhost:8000/mytestpage.html
Если у вас нет python, в Ruby есть эквивалентные модули, или Visual Web Developer Express поставляется со встроенным локальным веб-сервером.
Ответ 2
Ничто из перечисленного не помогло мне.
После небольшого исследования я обнаружил, что с M50 (апрель 2016) - Теперь для Chrome требуется безопасное происхождение (например, HTTPS) для геолокации.
Устаревшие функции небезопасного происхождения
Хост "localhost" является специальным b/c "потенциально безопасным". Вы можете не видеть ошибок во время разработки, если вы развертываете их на своей машине разработки.
Ответ 3
Как уже упоминалось в ответе robertc, Chrome блокирует определенные функции, такие как географическое расположение с локальными файлами. Более простой альтернативой настройке собственного веб-сервера было бы просто запустить Chrome с параметром --allow-file-access-from-files
. Затем вы можете использовать географическое местоположение, если вы не отключили его в своих настройках.
Ответ 4
Убедитесь, что он не заблокирован в ваших настройках
http://www.howtogeek.com/howto/16404/how-to-disable-the-new-geolocation-feature-in-google-chrome/
Ответ 5
если вы размещаете сервер за сервером и все еще сталкиваетесь с проблемами:
попробуйте изменить localhost на 127.0.0.1, например. http://localhost:8080/ в http://127.0.0.1:8080/
Проблема, с которой я столкнулась, заключалась в том, что я обслуживал сайт с помощью apache tomcat в среде eclipse IDE (eclipse luna).
Для моей проверки работоспособности я использовал демо Remy Sharp:
https://github.com/remy/html5demos/blob/eae156ca2e35efbc648c381222fac20d821df494/demos/geo.html
и получал ошибку после внесения незначительных изменений в функцию ошибки, несмотря на то, что хостинг кода на сервере (работал только с firefox и терпел неудачу на хроме и сафари):
"Пользователь запретил геолокацию"
Я сделал следующее изменение, чтобы получить более подробное сообщение об ошибке:
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:
"Текущее местоположение не может быть определено"
Ответ 6
Для простого обхода, просто скопируйте файл HTML на какой-либо облачный ресурс, например Dropbox, и используйте общую ссылку в своем браузере. Легко.
Ответ 7
Самый простой способ - щелкнуть по области, оставшейся до адресной строки, и изменить настройки местоположения. Он позволяет устанавливать параметры местоположения даже для file:///
![введите описание изображения здесь]()
Ответ 8
У меня тоже была эта проблема, когда я пытался использовать Gelocation API. Затем я начал работу с IIS через визуальную студию, а затем получил доступ к этой странице и работал без каких-либо проблем во всех браузерах.