如何添加浏览器历史记录状态?

时间:2010-09-03 08:11:00

标签: javascript jquery hashchange browser-state

所以我看到很多人推荐隐藏的iFrame hack jQuery history plugin,但我真正需要的只是这种技术的另一半:

function whenItemIsClicked()
    {
    window.location.hash = this.id;
    //some other stuff, like Ajax
    }

//and then, if page is reloaded...
$(document).ready(function(){
    var loc = window.location.hash;
    //if there happens to be a hash, navigate to corresponding content
    if(loc != '') $(loc).click();
});

这两项工作都很棒。现在,我想附上这两行

  var loc = window.location.hash;
  if(loc != '') $(loc).click();

到一个事件,但似乎没有一个将由后退按钮一致触发。有没有办法添加将保存当前URL的浏览器历史状态,以便上述技术可以工作?

1 个答案:

答案 0 :(得分:2)

有一个名为window.onhashchange的活动虽然不是每个人都支持它,但是... there's a plugin by Ben Alman来解决这个问题。

该插件使用window.onhashchange(本机事件)使其在跨浏览器中工作(如果存在)。如果没有,它会轮询每50ms并触发事件本身,如果哈希值发生变化。使用the plugin,您的代码将如下所示:

$(window).hashchange(function() {
  var loc = window.location.hash;
  if(loc != '') $(loc).click();    
});

您只需在一个地方使用该代码即可。您可以在document.ready中触发一次,只需触发事件就像上面那样绑定事件:

$(function(){
  $(window).hashchange();
});