2012-05-22 40 views
5

有沒有辦法提供諸如onHistoryBack之類的鉤子?我目前使用history.js與JavaScript上的歷史回鉤

History.Adapter.bind (window, 'statechange', function() {}); 

但我也沒辦法要問,如果用戶presed history.back(),或者如果它是一個History.pushState()調用..任何想法的結果呢?

回答

2

我這樣做的方式是在實際網站上每次點擊時將變量設置爲true。然後statechange事件會檢查這個變量。如果這是真的,他們已經在網站上使用了一個鏈接。如果它是錯誤的,他們點擊了瀏覽器後退按鈕。

例如:

var clicked = false; 

$(document).on('click','a',function(){ 

    clicked = true; 

    // Do something 

}); 

History.Adapter.bind (window, 'statechange', function() { 

    if(clicked){ 
     // Normal link 
    }else{ 
     // Back button 
    } 

    clicked = false; 

}); 

希望幫助:)

+0

謝謝@will我剛剛解決了使用像你這樣的方法,但是我在History.pushState(...)之間調用了「clicked」修改,以防止執行「statechange」掛鉤 –

1

所有州都存儲在History.savedStates。每次推回時都會添加另一個狀態。所以理論上你可以測試History.savedStates看看History.savedStates[History.savedStates.length - 2] == currentState。這將表明用戶從步驟a前往步驟b,返回步驟a。然而,用戶可以通過其他方式獲得除後退按鈕之外的其他方式 - 因此您可能需要將其與用戶事件結合使用。

您還可以使用History.getStateByIndex方法返回保存的狀態。