Chrome не кэширует скрытые значения полей формы для использования в истории браузера

У меня есть ASP.Net веб-форма, содержащая как текстовые поля, так и скрытые поля. Значения скрытых полей изменяются динамически с помощью JavaScript на стороне клиента. Разноска формы, проверка значений и перенаправление на другую страницу-все работает так, как ожидалось.

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

в IE и Firefox это это относится как к текстовым, так и к скрытым полям ввода.

в Chrome это касается только текстовых полей. Значение скрытых полей теряется.

правда ли, что Chrome никогда не заполняется динамическое задание скрытые значения полей формы при навигации по истории браузера?

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

3 ответов


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


эта проблема может быть решена с помощью небольшой хитрости.

проблема в том, что поля формы с типом=hidden с динамически заданными значениями не обрабатываются должным образом браузером Chrome.

таким образом, решение состоит в том, чтобы изменить тип поля на текст и использовать другой метод, чтобы скрыть видимые текстовые поля. Это может быть достигнуто путем окружения всех текстовых полей, содержащих значения, предназначенные для скрытия парой тегов DEV, и назначения стиля как отображения: нет!--3-->

затем на странице вы не увидите текстовые поля, содержащие скрытые значения, и он будет работать правильно с JavaScript браузера.

до

<input type=hidden name=item_no value=00001>

после

<div style="display: none">
    <input type=text name=item_no value=00001>
</div>

Я не могу комментировать, возможно, моя репутация слишком низкая, но чувствовал, что это важно упомянуть.

Я только что столкнулся с этой проблемой сам в Опера так позаимствовали решение Sanesh Фернандо, который работал вокруг скрытых полей не восстанавливается (благодаря Sanesh). Однако для меня проблема заключалась в том, что Javascript срабатывает до обновления полей формы, поэтому, если вы проверяете значения с помощью javascript, как я это делал, мне пришлось добавить setTimeout, чтобы обеспечить обновление Opera прежде чем я проверил значения.

Cookies, как указано другим способом, но что с нелепой директивой ЕС о требовании соглашения об использовании cookie от посетителя это не решение для меня.