首先,我似乎無法確定pushState函數中的第一個參數是什麼?我通過了什麼?我只是想在瀏覽我的頁面時更改網址。我查詢視口中當前元素的ID,其ID也應該是URL中的鏈接。這與以下代碼正常工作。HTML5/jQuery:pushState和popState - 深層鏈接?
var currentHash,
url;
if (history && history.pushState) {
$(window).scroll(function() {
hash = $('.layer:in-viewport').attr('id');
catHash = $("#"+hash).parent('section').attr('id');
var data = "nothing";
if (catHash != undefined)
url = "/" + catHash + "/" + hash;
else
url = "/" + hash;
if (currentHash != hash) {
window.history.pushState(data, hash, url);
}
currentHash = hash;
});
}
現在我有兩個問題:
1)現在在地址欄的網址成功地改變了,當我通過我的頁面滾動。我最初加載頁面時如何查詢地址欄中的url/hash。所以想象我現在有一個鏈接,如www.url.com/deep
我想找出什麼/深是什麼?我是否只需要查詢整個top.location並將其分割爲每個「/」?我的意思是這些鏈接實際上不存在,那麼當我調用一個使用pushState函數操作的url時,如何避免404頁面?
2.)單擊後退按鈕時,如何才能找出地址欄中的最後更改?所以我想在點擊瀏覽器後退按鈕時找到/deep
,這樣我就可以導航到頁面上的那個位置。我想這可能與popstate一起工作,但我找不到如何!
謝謝你的幫助!
更新:
window.history.pushState("test", hash, url);
...
$(window).bind('popstate', function(event){
console.log(event.data);
});
這常是空。不應該返回「測試」嗎?
'event.state'不'event.data' – Quentin 2012-01-08 10:12:04
是的,我試過了,但是沒有'event.state'當我'控制檯.log(event);'只有數據,但是數據總是「空」,如果我嘗試記錄'event.state',它總是空的! – matt 2012-01-08 10:17:14
好吧,找到解決方案......好像'$(window).bind('popstate',function(event){'不工作,但是'window.onpopstate = function(event){'does! – matt 2012-01-08 11:16:04