单击浏览器后退按钮获取用户选择

时间:2011-04-26 12:06:07

标签: php javascript jquery browser cross-browser

我的应用程序有几页。在某些页面上,我在其他页面上给出了一个后退按钮,但没有给出(客户要求)。现在在特定页面上,我有一个选项列表(选择是使用jQuery插件的图像幻灯片)由用户选择。选择一个选项会将用户带到下一页。现在,我希望获得与单击浏览器后退按钮时突出显示的相同选择的相同页面。在单击浏览器后退按钮时,我猜该页面正在重新加载丢失cookie值,即当我从我的图像集中选择图像时,它会将我带到另一页面。在单击浏览器后退按钮时,我想从该组中选择相同的图像来获取该页面。是否有任何解决方法,以便我也可以在浏览器上获取所选值。

2 个答案:

答案 0 :(得分:4)

另一个插件可以做到:

jQuery BBQ利用HTML5 hashchange事件来提供简单但功能强大的可收藏的#hash历史记录。此外,jQuery BBQ提供了一个完整的.deparam()方法,以及散列状态管理和片段/查询字符串解析和合并实用程序方法。

http://benalman.com/projects/jquery-bbq-plugin/

答案 1 :(得分:1)

当使用后退/前进/刷新按钮时,您可以使用几乎所有主要浏览器*都会触发的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事件。