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

时间:2012-03-22 17:36:46

标签: jquery jquery-plugins jquery-address

简短问题:

我正在尝试在给定页面中使用(使用制表符)后退按钮不会更改页面URL(历史记录)。我需要在用户按后退按钮时更改选项卡,但不显示所显示的URL。我怎么能用Address插件做到这一点?

长问题:

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

$.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已更改(按下每个后退按钮返回一个位置)。

我不能:

  • 为每个标签添加不同的网址(例如$ .address样本)
  • 更改其他类似的地址插件
  • 更改当前的分页系统(有点复杂)

这个想法是,如果 isTabsPage 为真,那么 changeTab()函数将起作用,否则,当前方法将起作用($ .address history managed)< / p>

有没有办法冻结历史?

2 个答案:

答案 0 :(得分:0)

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

这与jQuery没有任何关系。所有jQuery都会操纵location.hash属性。

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

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

答案 1 :(得分:0)

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