后退按钮 - 跳过锚点

时间:2011-05-05 21:53:54

标签: javascript url anchor

我有一个典型的ajax风格的动态内容设置:点击链接,在地址栏中更改锚点,然后加载新内容。当用户单击后退按钮时,它会循环显示所有锚点 - 正如预期的那样。

有没有办法(使用我假设的JavaScript)使后退按钮转到上一页,并“忽略”所有锚点?

2 个答案:

答案 0 :(得分:5)

Cout用户传递和使用的阶段

history.back(X);

  history.go(-1*X);

以便返回X页/锚点。

答案 1 :(得分:1)

首先,为了确保我理解,您已将AJAX书签命名为与DOM元素中的ID相同?如果是这样,无论如何要撤消这个?你可以欺骗它不要失败,但这是做法的愚蠢方式。相反,你应该拥有像#somepage这样的ID和像#!/somepage这样的AJAX网址,这样他们就不会感到困惑。此外,像谷歌这样的人不会知道普通的#id是哈希网址,但做#!/会给谷歌一个线索。

现在,如果您想使用#!/方法进行操作,则需要为旧浏览器设置计时器(< = IE7)但是对于“现代”浏览器IE8,FF和Chrome,您可以使用onhashchange JS财产如:

window.onhashchange = function(){ console.log('hash has changed') };

然后,如果你想支持旧的浏览器,你需要做一些更先进的事情。你需要这样做:

var currentPage = '';
setTimeout(function(){
  if(currentPage !== window.location.hash){
    console.log('hash has changed');
    currentPage = window.location.hash
  }
},500);

在这两个示例中,您需要将console.log()替换为您自己的函数,以触发“更改页面”事件。

要停止滚动,您可以添加:

window.onhashchange = function(){
  if (window.location.hash == "" || window.location.hash == "#"){ return false; }
  //rest of your code here!
};

返回false将阻止滚动。这应该也适用于计时器。

更多信息:
https://developer.mozilla.org/en/DOM/window.onhashchange
http://msdn.microsoft.com/en-us/library/cc288209(VS.85).aspx
http://ajaxpatterns.org/Unique_URLs