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