Когда пользователь закончит ввод данных на странице, я хочу, чтобы они вернулись на предыдущую страницу (например, Главная страница -> Страница ввода). Если я перенаправляю их, когда они нажимают «Отправить», я получаю круговую историю (Главная страница -> Страница ввода -> Главная страница). Следовательно, когда пользователь нажимает кнопку «Отправить», я вызываю window.history.back()
.
Чтобы предотвратить потерю данных, я прослушиваю событие beforeUnload. Если пользователь не отправил форму, я предлагаю убедиться, что он знает, что он потеряет свои изменения.
Проблема, с которой я сталкиваюсь, заключается в том, что если пользователь попытается вернуться, не отправив свои данные, нажмите «Отмена», чтобы остаться на странице, а затем нажмите «Отправить». 1-й раз, когда они наносят ответный удар, отменяется, а затем после отправки я выполняю history.back(), но в итоге это возвращает 2 записи в истории вместо 1. Это почти так, как если бы я отменил событие возврата, что предыдущий URL (Главная страница) полностью удаляется из стека истории. Следовательно, нажатие кнопки «Отправить» проходит мимо этой страницы и возвращается на страницу «Новая вкладка».
Я знаю, что управление стеком безумно сложно, но не могу понять, как перейти к предыдущему URL-адресу, если пользователь отменяет onBeforeUnload, чтобы остаться на странице, и отправляются обращения. Кажется, если пользователь отменит его, когда я вызову history.back(), он должен вернуться на главную страницу.