WedX - журнал о программировании и компьютерных науках

Изменение поведения кнопки «Назад», нажатой в браузере, чтобы остаться на том же сайте

У меня есть форма внутри представления после ее отправки кнопкой POST Edit Action вызывается. Я хочу, чтобы эта форма была отправлена ​​или ничего не происходило (осталось на той же странице), если пользователь нажимает кнопку «Назад» в браузере.

Вопрос. Можно ли изменить поведение кнопки "Назад" для представления Edit.cshtml, чтобы она не работала? Я имею в виду остаться на той же странице?

Пробовал это в режиме Razor. Ни результата, ни всплывающего окна, ничего:

<script>
    window.onbeforeunload = function (event) {
        var message = 'All changes will get lost!';
        if (typeof event == 'undefined') {
            event = window.event;
        }
        if (event) {
            event.returnValue = message;
        }
        return message;
    }
</script>

  • Веб-разработка 101: НИКОГДА не ломайте кнопку «Назад». 12.09.2014
  • @briansol Это закрытое приложение для работы, пользователям будет запрещено нажимать кнопку «Назад», но если они это сделают, я хочу быть уверен, что ничего не произойдет. 12.09.2014
  • Вы не можете запретить пользователям нажимать кнопку «Назад». Лучшее, что вы можете сделать, это перехватить событие onbeforeunload и попросить их остаться. 12.09.2014
  • @SalmanA Некоторые постоянные веб-сайты заманивают пользователей в ловушку и заставляют их оставаться на этом веб-сайте. Может быть, это возможно, чтобы перезагрузить Edit вид при нажатии кнопки «Назад»? 12.09.2014
  • @Yoda, зачем тебе такое поведение? Может быть, есть другой способ добиться того, что вы пытаетесь сделать. 12.09.2014

Ответы:


1

Вы можете прикрепить два события: beforeunload или unload. Как следует из названия, beforeunload запускается до unload и позволяет отменить выгрузку с разрешения пользователя. Ваше приложение не может принудительно отменить выгрузку; диалоговое окно подтверждения будет представлено пользователю, и только если они решат нажать «Отмена», оно будет отменено.

Итак, отвечая на часть вашего вопроса, нет, вы не можете заставить пользователя оставаться на странице. Если они захотят вернуться, в конце концов, им будет позволено вернуться. Максимум, что вы можете сделать, это вежливо попросить их остаться на странице. Однако вы можете воспользоваться возможностью через любое из этих событий, чтобы отправить синхронный запрос AJAX, чтобы сделать что-то вроде сохранения состояния формы. «Синхронная» часть является ключевой. Если вы используете традиционный асинхронный AJAX, браузер не будет ждать ответа и выгрузит страницу до завершения AJAX.

Однако все это действительно для другого возраста. Теперь, когда в HTML5 есть такие вещи, как локальное хранилище, это гораздо лучший способ управления сохранением состояния. Просто добавьте пользовательские входные данные в локальное хранилище, когда они изменяют поле, и когда ваша форма загружается, попытайтесь прочитать любые значения в локальном хранилище обратно в соответствующие поля. Таким образом, если пользователь вернется, перейдет на другую страницу или даже полностью покинет ваш сайт, форма по-прежнему будет содержать ранее введенную информацию, когда он вернется.

12.09.2014
  • Спасибо за разработку этой темы. Как определить, что произойдет (отображение окна) перед выгрузкой в ​​виде бритвы? 12.09.2014
  • Вы не можете на самом деле. Если вы возвращаете что-либо из обработчика событий, вы просто получаете стандартное окно подтверждения для конкретного браузера. Вы можете вернуть строку, которая будет добавлена ​​в окно подтверждения, но стандартный текст останется. 12.09.2014
  • Да, я хочу получить это окно подтверждения, но оно не появляется. Пробовал еще так: <script> window.onbeforeunload = function (e) { return 'Dialog text here.'; }; </script> браузеру все равно. IE и Хром 12.09.2014
  • Я также попробовал это, чтобы убедиться, что не ошибся: w3schools.com/tags /tryit.asp?filename=tryhtml5_ev_onunload это также не работает, предупреждение не отображается. 12.09.2014
  • FWIW, w3schools ужасны; избегайте его, как чумы. В любом случае, проще этого не бывает: jsfiddle.net/5xzfz5xn. (Убедитесь, что вы перезагружаете только результирующий фрейм; у jsfiddle есть собственная предварительная загрузка для главной страницы). 13.09.2014
  • Проблема была в том, что моего скрипта не было в разделе скрипты. Теперь проблема в том, что я получаю сообщение, когда я также покидаю сайт с помощью кнопки отправки, только когда кто-то нажимает кнопку «Назад». 13.09.2014

  • 2

    Как сказано в комментариях, вы не можете отключить кнопку «Назад». Представьте, что неряшливые веб-сайты могут сделать с этой силой. Если вы не хотите идти по пути beforeunload, упомянутому Крисом Праттом, другой вариант — открыть форму на новой странице; таким образом, в его истории не будет ничего, к чему можно было бы вернуться, поэтому кнопка «Назад» будет отключена.

    12.09.2014
    Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]