Я понимаю, что флажок будет оставаться включенным, когда вы вернетесь на страницу с помощью кнопки "Назад". Классы, добавленные с помощью jquery addClass, однако, нет. Может ли кто-нибудь помочь мне понять, когда что-то будет сохраняться или нет при возврате через кнопку "Назад"? Кроме того, есть ли способ сохранить значение переменной, чтобы я мог использовать значения переменных для воссоздания объектов, которые не сохранялись?
Что будет сохраняться при возврате с помощью кнопки "Назад"?
Ответ 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
и как ваше приложение будет обрабатывать его.
Здесь многое происходит, поэтому мои ссылки - это только отправная точка для изучения.
Ответ 4
В дополнение к приведенным выше ответам вы можете сохранить состояние формы с помощью viewstate.
ViewState позволяет ASP.NET повторно заполнять поля формы при каждой обратной передаче на сервер, убедившись, что форма не будет автоматически очищена, когда пользователь нажимает кнопку отправки.