Хобрук: Ваш путь к мастерству в программировании

Подсказка о геолокации HTML 5 в Chrome

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



Ответы:


1

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

python -m SimpleHTTPServer

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

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

25.03.2011
  • python -m http.server для Python 3.x 13.01.2013
  • Была такая же проблема, и файл был сброшен на мой локальный php-сервер (каталог xampp htdocs). Я предполагаю, что если вы хотите использовать геолокацию в разрабатываемом интерфейсном приложении, вы не можете просто запустить его со своего рабочего стола, оно должно быть на стороне сервера. Мне интересно, почему Google решил добавить это ограничение в Chrome. 12.06.2013
  • php -S localhost:8080 php -S ‹addr›: ‹port› Запуск со встроенным веб-сервером. 16.06.2014
  • node app.js Запустите простой сервер содержимого Node.js на порту 9615 stackoverflow.com/questions/6084360/ 16.06.2014
  • есть ли какое-нибудь решение для файла: // URI ?? 07.07.2014
  • У меня такая же проблема: я не могу переключиться на python и не могу разместить страницу, так как контент динамический и должен загружаться только с локального диска. Любая другая помощь? 16.01.2015
  • У меня не работает, даже если я запускаю локальный сервер. Местоположение разрешено в моих настройках. 28.03.2015
  • не знал, что вы можете сделать это с помощью Python. супер круто спасибо :) 03.08.2015

  • 2

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

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

    Устаревшие функции при небезопасном происхождении

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

    11.05.2016
  • Для локальных разработчиков используйте http://sitename.localhost Google Chrome разрешает getCurrentPosition() на .localhost, спасибо! 17.04.2018

  • 3

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

    23.10.2015

    4

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

    введите описание изображения здесь

    31.03.2017

    5

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

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

    15.05.2013
  • Этот ответ не имеет отношения к конкретной проблеме, поскольку Chrome always блокирует file://. 19.01.2016
  • К сожалению, связанная статья устарела и уже устарела. 02.02.2017

  • 6

    если вы размещаете за сервером и по-прежнему сталкиваетесь с проблемами: попробуйте изменить 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:

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

    24.09.2015
  • Да, спасибо за это, после многих лет возни, пытаясь заставить это работать (или используя safari - yuk!), У меня сработало просто изменение URL-адреса на 127.0.0.1. Легенда! 18.08.2016

  • 7

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

    16.01.2015

    8

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

    19.12.2015

    9

    Проверьте настройки 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.
    

    После того, как я изменил эти настройки, геолокация у меня заработала.

    28.02.2021
    Новые материалы

    Я собираюсь научить вас Python шаг за шагом
    Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..

    Альтернатива шаблону исходящих сообщений для архитектуры микросервисов
    Познакомьтесь с двухэтапным сообщением В этой статье предлагается альтернативный шаблон для папки Исходящие : двухэтапное сообщение. Он основан не на очереди сообщений, а на..

    React on Rails
    Основное приложение Reverb - это всеми любимый монолит Rails. Он отлично обслуживает наш API и уровень просмотра трафика. По мере роста мы добавляли больше интерактивных элементов..

    Что такое гибкие методологии разработки программного обеспечения
    Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...

    Ториго  — революция в игре Го
    Наш следующий вызов против ИИ и для ИИ. Сможет ли он победить людей в обновленной игре Го? Обратите внимание, что в следующей статье AI означает искусственный интеллект, а Goban  —..

    Простое развертывание моделей с помощью Mlflow — Упаковка классификатора обзоров продуктов NLP от HuggingFace
    Как сохранить свои модели машинного обучения в формате с открытым исходным кодом с помощью MLFlow, чтобы позже получить возможность легкого развертывания. Сегодня модели упаковки имеют несколько..

    Математика и интуиция - Часть 1
    У каждой математической формулы есть доказательство. Часто эти доказательства слишком сложно понять, поскольку многие из них основаны на индукции, некоторые - на очень сложных наблюдениях, а..