Jquery地址插件:如何避免历史更改?

Posted

技术标签:

【中文标题】Jquery地址插件:如何避免历史更改?【英文标题】:Jquery Address plugin: how to avoid history change? 【发布时间】:2012-04-07 07:48:53 【问题描述】:

小问题:

我试图在给定页面(使用标签)中使后退按钮不会更改页面 URL(历史记录)。是的,当用户按下 后退按钮 时,我需要标签更改,但显示的 URL 不会更改。如何使用地址插件做到这一点?

长问题:

除了上面的解释,我不得不说我是这样使用地址插件的:

$.address.strict(false);
$.address.externalChange(function(e) 
    changePageFunction(e.value);
);

在这个changePageFunction()里面我设置了$.address.title(the_title);$.address.value(the_value);。我尝试的是通过以下方式更改对 changePageFunction() 的直接调用:

$.address.externalChange(function(e) 
    if (!isTabsPage) 
        changePageFunction(e.value);
     else 
        changeTab();
    
);

这可行,但显示的 URL 会发生变化(每按下一个后退按钮就会返回一个位置)。

我不能:

为每个选项卡添加不同的 URL(如在 $.address 示例中) 其他类似的更改地址插件 改变当前的分页系统(有点复杂)

想法是,如果 isTabsPage 为真,则 changeTab() 函数将起作用,如果不是,则当前方法将起作用($.address history managed)

有没有办法冻结历史?

【问题讨论】:

【参考方案1】:

html5 有一个原生的历史对象来处理这个问题。您需要在用户更改选项卡时使用其 pushState 函数,并在用户向前/向后导航时处理其 popState 事件。 @balupton here 为旧版浏览器提供了一个很棒的 polyfill。

【讨论】:

【参考方案2】:

您无法控制浏览器的后退按钮。如果您首先设置哈希,浏览器将始终能够使用后退按钮更改哈希。您唯一的选择是获取哈希并手动更改它,这将通过循环等来破坏您的后退按钮功能。

这与 jQuery 无关。 jQuery 所做的只是操纵 location.hash 属性。

http://www.ezineasp.net/post/javascript-Location-Hash-with-Example.aspx

您为什么要这样做?您的应用程序状态应反映在哈希中。

【讨论】:

以上是关于Jquery地址插件:如何避免历史更改?的主要内容,如果未能解决你的问题,请参考以下文章

jquery 历史插件

jquery ajax 历史和书签插件

jquery历史插件

如何在不导航到该 url 的情况下推送历史记录条目并更改地址栏 url?

jQuery的历史版本

如何将分支内容移动到另一个存储库保留历史记录并避免复制原始存储库的完整历史记录?