Представьте, что у нас в приложении 2 типа потоков :
- Страница A → WizardStep1 → WizardStep2 → WizardStep3 → PageB
- PageC → PageD → WizardStep1 → WizardStep2 → PageD
В 1-м потоке мы перенаправляем пользователя на другую страницу.
Обратите внимание - во втором потоке мы возвращаемся к исходной странице PageD.
Каждый шаг страницы и мастера является отдельным компонентом и имеет свой собственный URL .
Естественно, когда мы нажимаем кнопку возврата браузера, мы возвращаемся назад в историю браузера.
Требования:
- Когда мы нажимаем на любой шаг мастера, мы делаем один шаг назад - это
нормальное поведение (например, из WizardStep3 обратно в WizardStep2)
- но однажды
Мастер завершен, мы не можем вернуться к мастеру
Позвольте мне попытаться объяснить это по-другому:
1. PageA → [ WizardStep1 → WizardStep2 → WizardStep3 ] → PageB
все в квадратных скобках - это процесс , и как только мы закончили с ним, мы не сможем вернуться к этому процессу снова, мы должны его пропустить.
Но если мы не завершили волшебника, мы можем вернуться.
Для потока 2 это больше похоже на
2. PageC → PageD <-> [ WizardStep1 → WizardStep2 ]
Проблема
Пользователь на PageB щелкает браузер назад и ожидает увидеть PageA, но мы переходим к предыдущему шагу WizardStep3 (для потока 1)
Пользователь на PageD после завершения работы мастера нажимает назад и ожидает увидеть PageC, но мы возвращаемся к мастеру.
Мои первоначальные мысли
Кстати, я использую страницу A, B, C, D. Чтобы сделать его более реальным, представьте, что пользовательский поток 1 заполняет приложение множеством форм, разбитых по шагам. Как только это будет сделано, вы не сможете вернуться и изменить данные. PageA может быть страницей, на которой был запущен мастер.
Для потока 2 - представьте себе редактирование профиля, где PageD - это профиль, а PageC - любая предыдущая страница.
Я знаю, что в браузере мы не можем удалить историю, но мы можем посчитать шаг и использовать goBack (-COUNT). Для потока 2 это может работать, а не для потока 1.
Поэтому, возможно, мы поддерживаем свою собственную историю, и мы открываем и отправляем туда URL-адреса, и каждый раз, когда пользователь нажимает на браузер, мы используем нашу собственную историю и всегда используем history.push для браузера, но я не уверен, что windown.onpopstate достаточно надежен.