0

简短的问题:

我试图在给定的页面(使用标签)中使后退按钮不会更改页面 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 历史记录)

有什么办法可以冻结历史?

4

2 回答 2

0

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

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

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

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

于 2012-03-22T17:47:46.707 回答
0

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

于 2012-03-22T17:51:56.137 回答