Сегодня я столкнулся с подобной проблемой и решил ее с помощью localStorage (здесь с небольшим количеством jQuery):
$(function() {
if ($('#page1').length) {
// this code must only run on page 1
var checkSteps = function () {
if (localStorage.getItem('steps') == 'step2') {
// if we are here, we know that:
// 1. the user is on page 1
// 2. he has been on page 2
// 3. this function is running, which means the user has submitted the form
// 4. but steps == step2, which is impossible if the user has *just* submitted the form
// therefore we know that he has come back, probably using the back button of his browser
alert('oh hey, welcome back!');
} else {
setTimeout(checkSteps, 100);
}
};
$('#form').on('submit', function (e) {
e.preventDefault();
localStorage.setItem('steps', 'step1'); // if "step1", then we know the user has submitted the form
checkOrderSteps();
// ... then do what you need to submit the form and load page 2
});
}
if ($('#page2').length) {
// this code must only run on page 2
localStorage.setItem('steps', 'step2');
}
});
Si в основном:
На странице 1, когда пользователь отправляет форму, мы устанавливаем значение "steps" в localStorage, чтобы указать, какой шаг сделал пользователь. В то же время мы запускаем функцию с тайм-аутом, которая проверяет, изменилось ли это значение (например, 10 раз в секунду).
На странице 2 мы немедленно меняем указанное значение.
Таким образом, если пользователь использует кнопку «Назад» и браузер восстанавливает страницу 1 в том же состоянии, в каком она была, когда мы ее покинули, функция checkSteps все еще работает и может обнаружить, что значение в localStorage было изменено (и может принять соответствующие меры). После того, как эта проверка выполнила свое назначение, нет необходимости продолжать ее выполнение, поэтому мы просто больше не используем setTimeout.