JavaScript. Подробное руководство, 6-е издание, стр. 376
Предусмотрев изменение значения свойства
<b>location.hash</b><b>Window</b><b>window.onhashchange</b><b>location.hash</b>Спецификация HTML5 также определяет другой, более сложный и более надежный способ управления историей посещений, основанный на использовании метода
<b>history.pushState()</b><b>history.pushState()</b><b>JSON.stringify(),</b><b>Date</b><b>RegExp</b>Как отмечалось выше, метод pushState() принимает объект с информацией о состоянии и создает его частную копию. Это полная, глубокая копия объекта: при ее создании рекурсивно копируется содержимое всех вложенных объектов и массивов. В стандарте HTML5 такие копии называются структурированными копиями. Процедура создания структурированной копии напоминает передачу объекта функции JSON. stringif у() и обработку результата функцией JSON.parse() (раздел 6.9). Но в формат JSON можно преобразовать только простые значения JavaScript, а также объекты и массивы. Стандарт HTML5 требует, чтобы алгоритм создания структурированных копий поддерживал возможность создания копий объектов Date и RegExp, ImageData (полученных из элементов <canvas> - раздел 21.4.14) и FileList, File и Blob (описывается в разделе 22.6). Функции JavaScript и объекты ошибок явно исключены из списка объектов, поддерживаемых алгоритмом создания структурированных копий, также как и большинство объектов среды выполнения, таких как окна, документы, элемент и т. д.
Вряд ли вам понадобится сохранять файлы или изображения как часть состояния приложения, однако структурированные копии также используются некоторыми другими стандартами, связанными со стандартом HTML5, и мы будем встречать их на протяжении всей этой главы.
В дополнение к методу
<b>pushState()</b><b>History</b><b>replaceState(),</b>Когда пользователь перемещается по истории посещений с помощью кнопок Back и Forward, броузер возбуждает событие «popstate» в объекте
<b>Window</b><b>state</b><b>pushState().</b>В примере 22.3 демонстрируется простое веб-приложение - игра «Угадай число», изображенная на рис. 22.1, - в которой используются описанные приемы сохранения истории посещений, определяемые стандартом HTML5, с целью дать пользователю возможность «вернуться назад», чтобы пересмотреть или повторить попытку.
Когда эта книга готовилась к печати, в броузере Firefox 4 было внесено два изменения в прикладной интерфейс объекта
<b>History</b><b>state</b><b>History</b>
Примерх 22.3. Управление историей посещений с помощью pushStatef()
<b><!DOCTYPE html></b><b><html><head><title>I'm thinking of a number...</title></b><b><script></b><b>window.onload = newgame; // Начать новую игру при загрузке</b><b>window.onpopstate = popstate; // Обработчик событий истории посещений</b><b>var state, ui; // Глобальные переменные, инициализируемые в функции newgame()</b><b>function newgame(playagain) { // Начинает новую игру "Угадай число"</b><b> // Настроить объект для хранения необходимых элементов документа</b><b> ui = {</b><b> heading: null, // Заголовок <h1> в начале документа.</b><b> prompt: null, // Текст предложения ввести число.</b>