JavaScript. Подробное руководство, 6-е издание, стр. 375

<b>    // Определите свое значение, если допустимо брать координаты из кэша.</b>

<b>    // По умолчанию имеет значение 0, что обеспечивает получение самой</b>

<b>    // свежей информации.</b>

<b>    maximumAge: 300000, // Пригодна информация, полученная в течение последних 5 минут</b>

<b>    // Предельное время ожидания выполнения запроса.</b>

<b>    // По умолчанию имеет значение Infinity, что соответствует бесконечному</b>

<b>    // времени ожидания выполнения запроса вызовом метода getCurrentPosition()</b>

<b>    timeout: 15000 // Ждать не более 15 секунд</b>

<b>  };</b>

<b>  if (navigator.geolocation) // Запросить координаты, если возможно</b>

<b>    navigator.geolocation.getCurrentPosition(success, error, options):</b>

<b>  else</b>

<b>    elt.innerHTML = &quot;Возможность определения местонахождения &quot; +</b>

<b>                    &quot;не поддерживается этим броузером&quot;:</b>

<b>  // Эта функция будет вызвана в случае неудачного выполнения запроса</b>

<b>  function error(e) {</b>

<b>    // Объект ошибки содержит числовой код и текстовое сообщение. Коды:</b>

<b>    // 1: пользователь не дал разрешения на определение местонахождения</b>

<b>    // 2: броузер не смог определить местонахождение</b>

<b>    // 3: истекло предельное время ожидания</b>

<b>    elt.innerHTML = &quot;Ошибка определения местонахождения &quot; + e.code + &quot;: + е.message;</b>

<b>  }</b>

<b>  // Эта функция будет вызвана в случае успешного выполнения запроса</b>

<b>  function success(pos) {</b>

<b>    // Эти поля возвращаются всегда. Обратите внимание, что поле timestamp</b>

<b>    // принадлежит внешнему объекту pos, а не вложенному coords,</b>

<b>    var msg = &quot;At &quot; +</b>

<b>      new Date(pos.timestamp).toLocaleString() +</b>

<b>        &quot; вы находились в &quot; + pos.coords.accuracy + </b>
<b> &quot; метрах от точки &quot; +</b>

<b>        pos.coords.latitude +</b>
<b> &quot; северной широты &quot; +</b>

<b>        pos.coords.longitude + &quot; восточной долготы.&quot;:</b>

<b>    // Если устройство возвращает высоту над уровнем моря, добавить эту информацию,</b>

<b>    if (pos.coords.altitude) {</b>

<b>      msg += &quot; Вы находитесь на высоте &quot; +</b>

<b>        pos.coords.altitude + &quot; ± &quot; + pos.coords.altitudeAccuracy +</b>

<b>                    &quot; метров над уровнем моря.&quot;;</b>

<b>    }</b>

<b>    // Если устройство возвращает направление и скорость движения,</b>

<b>    // добавить и эту информацию.</b>

<b>    if (pos.coords.speed) {</b>

<b>      msg += &quot; Вы перемещаетесь со скоростью &quot; +</b>

<b>        pos.coords.speed + &quot;м/сек в направлении &quot; + pos.coords.heading + &quot;.&quot;;</b>

<b>    }</b>

<b>    elt.innerHTML = msg; // Отобразить информацию о местонахождении</b>

<b>  }</b>

<b>}</b>

22.2. Управление историей посещений

Веб-броузеры запоминают, какие документы загружались в окно, и предоставляют кнопки Back и Forward, позволяющие перемещаться между этими документами. Эта модель хранения истории посещений в броузерах появилась еще в те дни, когда документы были статическими и все вычисления выполнялись на стороне сервера. В настоящее время веб-приложения часто загружают содержимое динамически и отображают новые состояния приложения без полной перезагрузки документа. Такие приложения должны предусматривать собственные механизмы управления историей посещений, если необходимо дать пользователю возможность использовать кнопки Back и Forward для перехода из одного состояния приложения в другое интуитивно понятным способом. Спецификация HTML5 определяет два механизма управления историей посещений.

Простейший способ работы с историей посещений связан с использованием свойства

<b>location.hash</b>
и события «hashchange». На момент написания этих строк данный способ был также наиболее широко реализованным: его поддержка в броузерах появилась еще до того, как он был стандартизован спецификацией HTML5. В большинстве броузеров (кроме старых версий IE) изменение свойства
<b>location.hash</b>
приводит к изменению URL, отображаемого в строке ввода адреса, и добавлению записи в историю посещений. Свойство
<b>hash</b>
определяет идентификатор фрагмента в URL и традиционно использовалось для перемещения к разделу документа с указанным идентификатором. Но свойство
<b>location.hash</b>
не обязательно должно определять идентификатор элемента: в него можно записать произвольную строку. Если состояние приложения можно представить в виде строки, эту строку можно будет использовать как идентификатор фрагмента.