Если javascript изменяет DOM на странице A, пользователь переходит на страницу B, а затем нажимает кнопку «Назад», чтобы вернуться на страницу A. Все изменения DOM страницы A теряются, и пользователю предоставляется версия, которая была первоначально получена с сервера.
Так работает на stackoverflow, reddit и многих других популярных сайтах. (попробуйте добавить тестовый комментарий к этому вопросу, затем перейдите на другую страницу и нажмите кнопку «Назад», чтобы вернуться - ваш комментарий будет «удален»)
Это имеет смысл, однако некоторые веб-сайты (apple.com, basecamphq.com и т. Д.) Каким-то образом заставляют браузер предоставлять пользователю последнее состояние страницы. (перейдите по адресу http://www.apple.com/ca/search/?q=ipod , щелкните ссылку "Скачивания" вверху, а затем нажмите кнопку "Назад" - все обновления DOM будут сохранены)
откуда взялось несоответствие?
источник
Ответы:
Один ответ: среди прочего, события выгрузки приводят к тому, что кеш обратного / прямого перехода становится недействительным .
Некоторые браузеры хранят текущее состояние всей веб-страницы в так называемом «bfcache» или «кеше страницы». Это позволяет им очень быстро повторно отображать страницу при навигации с помощью кнопок «назад» и «вперед» и сохраняет состояние модели DOM и всех переменных JavaScript. Однако, когда страница содержит события onunload, эти события могут потенциально перевести страницу в нефункциональное состояние, и поэтому страница не сохраняется в bfcache и должна быть перезагружена (но может быть загружена из стандартного кеша) и повторно загружена. рендеринг с нуля, включая запуск всех обработчиков загрузки. При возврате на страницу через bfcache DOM сохраняется в своем предыдущем состоянии, без необходимости запускать обработчики загрузки (потому что страница уже загружена).
Обратите внимание, что поведение bfcache отличается от стандартного кеша браузера в отношении Cache-Control и других заголовков HTTP. Во многих случаях браузеры кэшируют страницу в bfcache, даже если в противном случае он не сохранил бы ее в стандартном кеше.
jQuery автоматически прикрепляет событие выгрузки к окну, поэтому, к сожалению, использование jQuery не позволит вашей странице храниться в bfcache для сохранения DOM и быстрого перехода назад / вперед.. [Обновление: это было исправлено в jQuery 1.4 и теперь применимо только к IE]источник
Я пытался заставить Chrome вести себя так же, как Safari, и единственный способ, который, как я обнаружил, работает, - это установить
Cache-control: no-store
в заголовках. Это заставляет браузер повторно загружать страницу с сервера, когда пользователь нажимает кнопку возврата. Не идеально, но лучше, чем показывать устаревшую страницу.источник
Facebook запоминает состояние страницы, изменяя хэш-идентификатор в URL-адресе для запросов ajax. Эти изменения записываются в историю браузера, поэтому, когда пользователь нажимает кнопку «Назад», хеш изменяется на то, что было раньше. Таким образом, подразумевается, что вам понадобится некоторый Javascript для отслеживания идентификатора has и реакции на его изменение браузером. У Андреаса Бликста есть скрипт для мониторинга хэшей .
источник
Это не имеет ничего общего с символом решетки (#).
Если вы проверите HTTP-заголовки Apple, они просто кешируют страницу.
источник
Использование идентификатора хэша / фрагмента URL-адреса - довольно распространенный способ перехвата / запоминания состояния в веб-приложении, которое полагается на обновления Ajax и DOM.
Проверьте Really Simple History проект для некоторых идей. Можно отслеживать URL-адрес на предмет изменений хэша, и rsh делает это с учетом различий в браузерах.
источник
Для всех, кто сталкивается с проблемами,
Rails
и это - ваша проблема не в bfcache (я так думал) - этоturbolinks
жемчужина. Вот как это удалить.Надеюсь, это сэкономит вам время и ударится головой о стену.
источник
То, что вы ищете, - это какой-то тип управления хешем URL. # В URL-адресе предназначен только для клиентской стороны.
Когда вы меняете состояние спины с помощью JS, вы обновляете данные в # URL-адреса.
Также вы добавляете какой-то тип опроса, который отслеживает, изменился ли хэш, и загружает состояние страницы на основе новых данных в хеше.
Взгляните на это:
http://ajaxpatterns.org/Unique_URLs
источник