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

Мне нужно было несколько вариантов для работы геолокации на наших ноутбуках с IE8, и я изучил как Google Chrome Frame (который работает), так и jquery polyfill (это то, что я пытаюсь заставить работать). Веб-сайт, с которого был взят пример, называется 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» имеет значение null или не является объектом Строка: 13 Char: 7 Код: 0 URI: ../GeoLocation/jquery.action

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


person Risu    schedule 07.12.2011    source источник


Ответы (3)


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

$.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://

person Maurice    schedule 07.12.2011
comment
Выдает ту же ошибку, за исключением того, что это строка 17 вместо 13 с добавленным кодом. - person Risu; 07.12.2011
comment
Я не увидел строку, добавляющую опцию геолокации: $.webshims.setOptions('geolocation', {....}); - person Maurice; 07.12.2011
comment
Я не обновил свой пост, чтобы отразить изменение его добавления, но я добавил его в свой локальный источник, поэтому мой номер строки изменился. Однако это не решило проблему. - person Risu; 07.12.2011
comment
Это должны быть загруженные файлы, которые вызывают проблему, потому что вы правы, это работает. Я перезагружу их с гитхаба и попробую еще раз. - person Risu; 07.12.2011

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

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

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

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

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

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

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

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

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

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

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

person alexander farkas    schedule 05.01.2012

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

person andlrc    schedule 07.12.2011
comment
Тогда почему это должно работать в Firefox, Chrome и IE9, если это запрещено локальным хостом? - person Risu; 07.12.2011