您可以利用onunload 事件,当使用后退/前进/刷新按钮时,几乎所有主要浏览器* 都会触发该事件。让onunload 事件处理程序向 PHP 脚本同步发送一个 AJAX 请求,其中包含恢复当前页面状态所需的所有值:
$(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 事件。