Подтвердить что ты не робот

Что будет сохраняться при возврате с помощью кнопки "Назад"?

Я понимаю, что флажок будет оставаться включенным, когда вы вернетесь на страницу с помощью кнопки "Назад". Классы, добавленные с помощью jquery addClass, однако, нет. Может ли кто-нибудь помочь мне понять, когда что-то будет сохраняться или нет при возврате через кнопку "Назад"? Кроме того, есть ли способ сохранить значение переменной, чтобы я мог использовать значения переменных для воссоздания объектов, которые не сохранялись?

4b9b3361

Ответ 1

Ничего не сохраняется - классы не сохраняются, поскольку DOM регенерируется, переменные JS не сохраняются, потому что код повторно выполняется и т.д. В то же время реализации браузера, похоже, в значительной степени согласны сохранить введенные пользователем данные формы для даже если это поведение не является частью какой-либо официальной спецификации.

Если вам нужно, чтобы некоторые данные сохранялись на стороне клиента, возможно, вы делаете что-то неправильно в архитектуре. Почему вы пытаетесь переопределить поведение кнопки "назад" браузера для возврата пользователя в произвольное состояние, вместо перехода на предыдущий URL-адрес и повторного рендеринга страницы? Если ваше приложение сильно взаимодействует, и это поведение кнопки "назад" желательно, вы можете отказаться от того, чтобы пользователь перемещался между независимыми страницами в пользу создания запросов AJAX и полагался на что-то вроде html5 history api, позволяющий выполнить любой произвольный код, чтобы перевести страницу в нужное состояние.

Вы не входите в подробные сведения о том, что вы на самом деле ожидаете хранить - возможно, localStorage или альтернатива файла cookie будет более подходящей

Update:

Я собрал скрипку, чтобы проверить, насколько хорошо будут сохраняться данные формы при прохождении истории, а скрытые поля будут доступны для обработки JS - все еще не хорошая идея, хотя imo

Ответ 2

Современные браузеры стараются все больше и больше. Firefox экспериментировал несколько лет назад с сохранением всего, включая изменения имени класса, если сервер указывает, что страница кэшируется в заголовке HTTP, и веб-страница не зарегистрировала никаких обработчиков событий onunload. Firefox срабатывает onpageshow и onpagehide, когда пользователь нажимает назад.

https://developer.mozilla.org/en-US/docs/Using_Firefox_1.5_caching https://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/

Ответ 3

Это в значительной степени зависит от того, обрабатываете ли вы или не используете хэш URL-адреса, т.е. если вы это сделаете, вы можете сохранить все.

Редакция:

Вы должны быть знакомы с концепцией Single Page Application (SPA).

Это все возможно благодаря способности изменять свойство хеша местоположения и управлять историей браузера.

Чтобы сделать это просто, существует множество библиотек, таких как Sammy.js

Каждый раз, когда у вас есть пользователь, выполняющий действие, вы нажимаете новое состояние и, таким образом, вы сможете обрабатывать нажатие кнопки "Назад".

Чтобы понять, как это выглядит, проверьте jsfiddle

В коде вы видите настройку routes:

Sammy(function() {
    this.get('#:folder', function() { ... });
    this.get('#:folder/:mailId', function() { ... });
})).run();

Какой хэш, т.е. www.mygreatwebsite.com/#inbox/#1 и как ваше приложение будет обрабатывать его.

Здесь многое происходит, поэтому мои ссылки - это только отправная точка для изучения.

EDITED: гораздо более простой пример использования sammy.js

Ответ 4

В дополнение к приведенным выше ответам вы можете сохранить состояние формы с помощью viewstate.

ViewState позволяет ASP.NET повторно заполнять поля формы при каждой обратной передаче на сервер, убедившись, что форма не будет автоматически очищена, когда пользователь нажимает кнопку отправки.