Вы можете использовать событие onunload
, которое будет запускаться почти во всех основных браузерах * при использовании кнопки назад / вперед / обновления. Пусть обработчик событий onunload
синхронно отправляет запрос AJAX, содержащий все значения, необходимые для восстановления текущего состояния страницы, в сценарий PHP:
$(window).unload(function() {
// Insert your code here to collect all values
// necessary to save a restorable state of the
// current page.
//
// var pageState = {
// page: host.pathname,
// :
// };
$.ajax({
type: "POST",
async: false,
url: "http://mydomain.com/mysave.php",
data: jQuery.param(pageState),
error: function(jqXHR, textStatus, errorThrown){
// your code
}
success: function(data, textStatus, jqXHR){
// your code
}
});
});
Позвольте PHP-сценарию сохранить полученное состояние страницы где-нибудь (например, сеанс, база данных и т. Д.), Чтобы оно было доступно, когда вы собираетесь сгенерировать страницу, которую хотите восстановить в предыдущее состояние.
Имейте в виду, что это решение имеет возможный недостаток.
Синхронный запрос используется, чтобы дать серверу реальную возможность получить и обработать запрос полностью. Асинхронный запрос будет немедленно возвращен, таким образом, уже загружая новую страницу и возможно отменяет асинхронный запрос, выполняющийся параллельно, до того, как он будет завершен (или даже отправлен).
Otoh синхронные запросы блокировать (заморозить браузер, пользователь не может ничего сделать), пока сервер не ответит. Если ваш сервер не отвечает, это может привести к тупику. К сожалению, нет способа отменить синхронный запрос на стороне клиента (по крайней мере, ни одного из тех, о которых я знаю), поэтому вы всегда должны делать синхронные запросы максимально короткими (время обработки на стороне сервера). И чтобы убедиться, что у вас быстрый и надежный сервер, но он всегда должен быть у вас ^^.
* Имейте в виду, что некоторые браузеры (например, Opera) не запускают событие onunload
, когда используются определенные кнопки браузеров.