我有一个典型的ajax风格的动态内容设置:单击链接,更改地址栏中的锚点并加载新内容。当用户点击后退按钮时,它会循环遍历所有锚点 - 正如预期的那样。后退按钮 - 跳过锚点
有没有一种方法(使用JavaScript我假设)使后退按钮转到上一页,并'忽略'所有锚点?
我有一个典型的ajax风格的动态内容设置:单击链接,更改地址栏中的锚点并加载新内容。当用户点击后退按钮时,它会循环遍历所有锚点 - 正如预期的那样。后退按钮 - 跳过锚点
有没有一种方法(使用JavaScript我假设)使后退按钮转到上一页,并'忽略'所有锚点?
COUT阶段的用户传递并使用
history.back(X);
为了回去X页/锚
或
history.go(-1*X);
。
首先,为了确保我的理解,您已将您的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