2011-05-05 95 views
1

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

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

回答

5

COUT阶段的用户传递并使用

history.back(X); 
为了回去X页/锚

history.go(-1*X); 

1

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

现在,如果你想用一个#!/的方法来做到这一点,你需要对旧的浏览器(< = 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