проблема флажка / кнопки в зависимости от браузера - PullRequest
3 голосов
/ 16 марта 2012

Я реализовал сайт в .jsp / JSTL / EL, который отлично работает. Однако в зависимости от браузера (!) Поведение кнопки «назад» может немного отличаться.

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

Вот сценарий, как я его понимаю:

  1. пользователь находится на странице / page1 , затем устанавливает флажок
  2. POST сделан, есть перенаправление HTTP
  3. a GET выполнен, страница / page2 отображается нормально, с установленным флажком, как и должно быть
  4. пользователь нажимает кнопку возврата
  5. пользователь возвращается к / page1 , как это было до того, как флажок был установлен (что в точности соответствует ожидаемому поведению кнопки возврата) , но флажок все еще проверено.

Если посмотреть на журнал сервера и журнал моего приложения, насколько я вижу, на веб-сервер абсолютно ничего не передается. Так что все происходит на стороне клиента.

Что происходит и как я могу это исправить? (без использования фреймворка вопрос не в этом)

РЕДАКТИРОВАТЬ Я, вероятно, должен дать немного больше информации ... Веб-приложение уже немного "наворочено" в том, что каждая обслуживаемая страница - в крошечном стиле, похожем на URL - соответствует состоянию , Все является «общедоступным»: любой может видеть чьи-либо страницы (но они могут быть приватными, с частными URL). В любом случае: если пользователь разделяет любую своей страницы, когда другой пользователь открывает страницу, она должна отображаться правильно, а флажки правильно инициализируются.

Все это говорит о том, что проблема не в серверной части, где «состояние» как-то не правильно: если пользователь A делится страницами ... / 1d2eof, то пользователь B открывает страницу ... / 1d2eof увидим правильную страницу.

Единственный раз, когда это запутывается, это когда пользователь нажимает кнопку "Назад". Помните, что в любой момент у меня есть полное состояние страницы, доступное на стороне сервера. Однако моя проблема заключается в том, что при использовании кнопки «назад» ничто не связывается с моим сервером, поэтому у меня нет возможности «исправить страницу» для пользователя, который использовал кнопку «назад».

Может быть, поможет двойное перенаправление!?

Ответы [ 3 ]

3 голосов
/ 03 октября 2012

Вот как я решил свою проблему, используя комбо скрытого поля и строку запроса.

<script type="text/javascript">
    jQuery(document).ready(function () {

    if (!(window.location.toString().indexOf('&FIP') >= 0) && (document.getElementById("<%= hdnField.ClientID %>").value.toString() == "BackButtonClickIsSet")) {
        document.location.reload(true);
    }

    if (!(window.location.toString().indexOf('&FIP') >= 0)) {
        document.getElementById("<%= hdnField.ClientID %>").value = "BackButtonClickIsSet";
    }

    if (window.location.toString().indexOf('&FIP') >= 0) {
        document.getElementById("<%= hdnField.ClientID %>").value = "BackButtonClickIsNotSet";
    }

});
</script>


<asp:HiddenField ID="hdnField" runat="server" Value="BackButtonHiddenField" />
3 голосов
/ 16 марта 2012

Это функция браузера: нажатие кнопки «назад» восстановит конечное состояние формы. Если вы хотите сбросить содержимое формы до того, что было указано в HTML (то есть в состояние до взаимодействия с пользователем), вы можете использовать document.formName.reset(), где formName - это имя формы. (К сожалению, довольно сложно определить, что пользователь нажал кнопку «назад» и вернулся на текущую страницу, поэтому сложно определить, когда следует выполнить приведенный выше фрагмент кода.)

0 голосов
/ 16 марта 2012

Возможно, вы захотите взглянуть на http://www.bajb.net/2010/02/browser-back-button-detection/

Он дает возможность получить контроль над тем, что происходит на стороне клиента (и, возможно, на стороне сервера с помощью ajax), когда нажимается кнопка возврата.

...