我有一个典型的ajax风格的动态内容设置:点击链接,在地址栏中更改锚点,然后加载新内容。当用户单击后退按钮时,它会循环显示所有锚点 - 正如预期的那样。
有没有办法(使用我假设的JavaScript)使后退按钮转到上一页,并“忽略”所有锚点?
答案 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