Webshims, IE8 и геолокация - PullRequest
       23

Webshims, IE8 и геолокация

1 голос
/ 07 декабря 2011

Я хотел использовать несколько вариантов работы геолокации для наших ноутбуков IE8 и исследовал как Google Chrome Frame (который работает), так и полифилл jquery (что я и пытаюсь заставить работать). Веб-сайт, с которого был взят пример: webshims , и я убедился, что упомянутая демонстрационная страница работает в IE8, но я не могу воссоздать пример для себя. Это мой JSP:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
  <head>
    <meta charset=utf-8>
    <title>Geolocation</title>
    <script src="<c:url value="/js/jquery-1.6.4.min.js"/>" type="text/javascript"></script>
    <script src="<c:url value="/js/modernizr-latest.js"/>" type="text/javascript"></script>
    <script src="<c:url value="/js/polyfiller.js"/>" type="text/javascript"></script>
    <script type="text/javascript">
      //http://afarkas.github.com/webshim/demos/demos/geolocation.html
      $.webshims.polyfill();
      navigator.geolocation.getCurrentPosition(function(pos){ $("#status").html("found you! latitude: "+ pos.coords.latitude +"/longitude: " + pos.coords.longitude); });
    </script>
  </head>
  <body>
    <p>Finding your location: <span id="status">checking...</span></p>
  </body>
</html>

Он работает в любом браузере, где изначально поддерживается геолокация, но полифилл, похоже, не выполняет свою работу для IE8. Я получаю ошибку ниже:

Сведения об ошибке веб-страницы

Пользовательский агент: Mozilla / 4.0 (совместимый; MSIE 8.0; Windows NT 5.1; Trident / 4.0; ChromeFrame / 15.0.874.121; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) Отметка времени: среда, 7 декабря 2011 г. 17:48:06 UTC

Сообщение: 'navigator.geolocation' является нулевым или не является объектом Строка: 13 Char: 7 Код: 0 URI: ../GeoLocation/jquery.action

Я что-то упустил, чтобы сделать эту функцию правильно?

Ответы [ 3 ]

3 голосов
/ 07 декабря 2011

Сначала необходимо активировать полифилл. Смотрите пример источника, в котором есть следующий скрипт:

$.webshims.setOptions('geolocation', {
            confirmText: '{location} wants to know your position. It is Ok to press Ok.'
        });
        //load all polyfill features
        //or load only a specific feature with $.webshims.polyfill('feature-name');
        $.webshims.polyfill();

Обновление: Эта HTML-страница прекрасно работает как в IE9, IE7, так и в Chrome

<!DOCTYPE html>
<html>
  <head>
    <meta charset=utf-8>
    <title>Geolocation</title>
    <script src="http://code.jquery.com/jquery-1.6.4.min.js" type="text/javascript"></script>
    <script src="http://afarkas.github.com/webshim/demos/js-webshim/minified/extras/modernizr-custom.js" type="text/javascript"></script>
    <script src="http://afarkas.github.com/webshim/demos/js-webshim/minified/polyfiller.js" type="text/javascript"></script>
    <script type="text/javascript">
      //http://afarkas.github.com/webshim/demos/demos/geolocation.html
      $.webshims.setOptions('geolocation', {
            confirmText: '{location} wants to know your position. It is Ok to press Ok.'
        });
      $.webshims.polyfill();
      $(function(){
        navigator.geolocation.getCurrentPosition(function(pos){ $("#status").html("found you! latitude: "+ pos.coords.latitude +"/longitude: " + pos.coords.longitude); });
      });
    </script>
  </head>
  <body>
    <p>Finding your location: <span id="status">checking...</span></p>
  </body>
</html>

Убедитесь, что обслуживаете его, используя HTTPL //, а не FILE: //

3 голосов
/ 06 января 2012

Я создатель веб-библиотеки lib. Чтобы прояснить вашу проблему, вот некоторые сведения.

  1. Вам не нужно устанавливать параметры для получения геолокации. Это только опция, а не код инициализации. (Подробнее о настройке опций вообще )

  2. да, вы должны инициализировать свой код, если вам нужна только геолокация и никакие другие функции, вам следует использовать следующую строку (дополнительная информация о функциях инициализации ):

    $ webshims.polyfill ( 'геолокации.');

Если вы используете метод polyfill без каких-либо аргументов, будут реализованы все функции, что увеличивает размер загружаемого файла.

  1. Готовность к заполнению (причина, по которой ваш скрипт не работал). Webshims реализует функции, используя загрузчик скриптов, который реализует все асинхронно, поэтому вам придется ждать определенного обратного вызова. (Подробнее о готовности функции )

Либо вы ждете готовый обратный вызов jQuery (который требуется до тех пор, пока не будут реализованы все функции:

$(function(){
    //use feature here (all features + DOM are ready
});

Или, если вы хотите получить доступ к своей функции как можно скорее, существует специальный обратный вызов готовности, который сработает до готовности DOM:

$.webshims.ready('geolocation', function(){
    //use geolocation feature here
});

Если у вас есть какие-либо вопросы или предложения, в том числе о том, как улучшить документацию, сообщите мне.

0 голосов
/ 07 декабря 2011

возможно navigator.geolocation не разрешено на локальном хосте, попробуйте вставить его в www. :)

...