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. Затем вы можете использовать географическое местоположение, если вы не отключили его в своих настройках.

Ответ 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 через визуальную студию, а затем получил доступ к этой странице и работал без каких-либо проблем во всех браузерах.