HTML 5 Geo Location Prompt в Chrome - PullRequest
68 голосов
/ 24 марта 2011

Просто начинаю изучать HTML 5 и тестировать географическое местоположение ... пока что мне нравится. Я немного ударил по скорости ... хотя, когда я пытаюсь определить свое географическое местоположение, Chrome автоматически блокирует страницу от определения моего местоположения. Это не происходит на других сайтах, таких как сайт ниже:

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". По этой причине я не получаю приглашения? Если да, можно ли принудительно запустить браузер? запросить разрешение на получение географического местоположения пользователя, и возможно ли это в моем сценарии?

Ответы [ 8 ]

97 голосов
/ 25 марта 2011

В Chrome существует какое-то ограничение безопасности для использования геолокации из file:/// URI, хотя, к сожалению, он не регистрирует никаких ошибок, указывающих на это. Это будет работать с локального веб-сервера. Если у вас установлен python, попробуйте открыть командную строку в каталоге, где находятся ваши тестовые файлы, и введите команду:

python -m SimpleHTTPServer

Он должен запустить веб-сервер на порту 8000 (может быть что-то еще, но он сообщит вам в консоли, какой порт он прослушивает), а затем перейдите к http://localhost:8000/mytestpage.html

Если у вас нет python, в Ruby есть эквивалентные модули или Visual Web Developer Express поставляется со встроенным локальным веб-сервером.

25 голосов
/ 11 мая 2016

Ничто из вышеперечисленного не помогло мне.

После небольшого исследования я обнаружил, что с M50 (апрель 2016 г.) - Chrome теперь требует безопасного происхождения (такого как HTTPS) для геолокации .

Устаревшие функции по небезопасным источникам

Хост "localhost" является специальным, поскольку он "потенциально безопасен".Вы можете не увидеть ошибок во время разработки, если вы развертываете на своей машине разработки.

6 голосов
/ 23 октября 2015

Как уже упоминалось в ответе Роберта, Chrome блокирует определенные функции, такие как географическое положение с локальными файлами.Более простой альтернативой настройке собственного веб-сервера будет просто запустить Chrome с параметром --allow-file-access-from-files.Затем вы можете использовать географическое положение, если вы не отключили его в своих настройках.

2 голосов
/ 31 марта 2017

Самый простой способ - щелкнуть область слева от адресной строки и изменить там настройки местоположения. Это позволяет устанавливать параметры местоположения даже для file:///

enter image description here

2 голосов
/ 25 сентября 2015

, если вы используете хостинг за сервером и по-прежнему сталкиваетесь с проблемами: попробуйте изменить localhost на 127.0.0.1 например. http://localhost:8080/ до http://127.0.0.1:8080/

Проблема, с которой я столкнулся, заключалась в том, что я обслуживал сайт с помощью Apache Tomcat в 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:

«Текущее местоположение не может быть определено»

2 голосов
/ 15 мая 2013

Убедитесь, что он не заблокирован в ваших настройках

http://www.howtogeek.com/howto/16404/how-to-disable-the-new-geolocation-feature-in-google-chrome/

1 голос
/ 16 января 2015

Для простого обхода проблемы просто скопируйте файл HTML в какой-либо общий ресурс облака, например Dropbox, и используйте общую ссылку в своем браузере. Легко.

0 голосов
/ 19 декабря 2015

У меня тоже была эта проблема, когда я пробовал Gelocation API. Затем я запустил IIS Express через Visual Studio, а затем получил доступ к странице, и она работала без проблем во всех браузерах.

...