【发布时间】:2011-05-05 21:53:54
【问题描述】:
我有一个典型的 ajax 风格的动态内容设置:单击一个链接,更改地址栏中的锚点,然后加载新内容。当用户单击后退按钮时,它会循环遍历所有锚点 - 正如预期的那样。
有没有办法(我假设使用 JavaScript)使后退按钮转到上一页,并“忽略”所有锚点?
【问题讨论】:
标签: javascript url anchor
我有一个典型的 ajax 风格的动态内容设置:单击一个链接,更改地址栏中的锚点,然后加载新内容。当用户单击后退按钮时,它会循环遍历所有锚点 - 正如预期的那样。
有没有办法(我假设使用 JavaScript)使后退按钮转到上一页,并“忽略”所有锚点?
【问题讨论】:
标签: javascript url anchor
计算用户通过和使用的阶段
history.back(X);
或
history.go(-1*X);
为了返回 X 个页面/锚点。
【讨论】:
首先,为了确保我理解,您将 AJAX 书签命名为与 DOM 元素中的 ID 相同?如果是这样,无论如何要撤消此操作?您可以欺骗它不要倒下,但这是一种笨拙的做法。相反,您应该有一个像#somepage 这样的ID 和像#!/somepage 这样的AJAX url,这样他们就不会感到困惑。此外,像 Google 这样的人不会知道普通的 #ids 是哈希 URL,但 #!/ 会给 Google 一个线索。
现在,如果您想使用 #!/ 方法来执行此操作,您需要为旧版浏览器设置一个计时器 (
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()s 替换为您自己的触发“更改页面”事件的函数。
要停止滚动,您可以添加:
window.onhashchange = function(){
if (window.location.hash == "" || window.location.hash == "#"){ return false; }
//rest of your code here!
};
return 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
【讨论】:
location.replace(document.referrer)
这对我有用。根据您的目的,您可以在“onclick”中使用它或通过 JavaScript 添加一些附加条件,例如如果推荐人为空 看: In what cases will HTTP_REFERER be empty
【讨论】: