История HTML5: проблемы с кнопкой «Назад» после полной загрузки страницы - PullRequest
3 голосов
/ 13 сентября 2011

Я создаю веб-приложение, которое использует AJAX и историю HTML5 (с запасным вариантом для более старых браузеров, history.js ).

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

Когда я немного переместился по динамической части (URL-адрес изменяется и соответствует отображаемому содержимому), оставил его через обычную ссылкуи затем нажимаем кнопку возврата браузера, происходит нечто странное: только та часть, которая была загружена в последнем XHR (в моем случае это div, содержащий некоторые данные), отображается без макета и css.Когда я смотрю на источник (в Chromium и FF + Firebug), DOM состоит только из указанного div.

Я ожидал, что браузер либо кэширует DOM и другую информацию, так что он сможет восстановитьпредыдущей страницы, или она перезагрузит последний URL-адрес (страница будет отображаться, как и ожидалось, потому что, если она не загружена через XHR, она будет отображена в макете).Я попытался установить заголовки элементов управления кешем в ответ на XHR, но это не помогло.

Я собрал минимальный пример : http://moserei.de/html5_history/

Спасибо за вашу помощь!

Ответы [ 2 ]

2 голосов
/ 13 сентября 2011

Я просто исследовал немного дальше и сам нашел проблему.Кажется, что Rails не особенно хорош в настройке правильных заголовков управления кэшем.Когда я устанавливаю их сам (управление кэшем, pragma = no-cache и срок действия истекает в прошлом, см. Первый ответ здесь ), браузеры уважают его и перезагружают страницу в обычном запросе.

0 голосов
/ 13 сентября 2011

Это конфликт имен:

Исходная страница имеет 2 состояния и занимает 2 URL:

  1. http://moserei.de/html5_history/
  2. http://moserei.de/html5_history/xhr.html

Запрос XHR для http://moserei.de/html5_history/xhr.html имеет другой ответ, отличный от исходной страницы. Теперь этот URL http://moserei.de/html5_history/xhr.html связан с 2 вещами:

  1. Состояние в исходном URL
  2. Отдельный контент, отправленный через XHR

Что должен делать браузер, когда ему нужно извлечь этот URL из кэша (когда вы нажимаете кнопку назад)? Сложно сказать. Я не уверен, есть ли в спецификации истории четко определенное правило, поэтому постарайтесь избежать этого.

...