我有一個典型的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