我用(https://github.com/browserstate/history.js)的stateChange事件調用回調函數,並有一個像這樣瀏覽器的後退和前進按鈕不會history.js
History.Adapter.bind(window, 'statechange', function() {
var State = History.getState();
alert('Inside History.Adapter.bind: ' + State.data.myData);
});
function manageHistory(url, data, uniqueId){
var History = window.History;
if (!History.enabled) { return false; }
History.replaceState({myData: data}, null, '?stateHistory=' + uniqueId);
}
的一段代碼,如果我在我的Ajax調用後調用manageHistory()
,然後History.Adapter.bind
回調方法調用正確。但是,如果我點擊瀏覽器的後退,然後單擊前進按鈕結果頁面導航從B到A,然後回到B,回調方法裏面History.Adapter.bind
不會被調用。這發生在Chrome和IE9上。任何人都知道如何解決這個問題,我需要點擊瀏覽器後點擊State
,然後轉發,以更新我的DOM。請幫助
注:我使用的版本1.7.1 jquery.history.js爲HTML4瀏覽器IE9
更新(2013年5月3日):談一點關於我的要求
對不起我忙於完成其他任務,直到現在我有時纔會看到這個問題。因此,我調用了一個ajax調用的oncomplete
,這個信息返回給我,並將它推入狀態。我的要求是:如果我定位從網頁A指向網頁B,然後在頁面B,我執行導致DOM操作Ajax請求的數量(我們稱之爲導致DOM操縱state
每個Ajax請求)。如果我點擊後退按鈕,我應該返回到頁面A,如果我點擊前進按鈕,我應該轉到頁面B,並顯示最後一個狀態。
所以我的想法是,我的oncomplete
ajax請求,我會用當前狀態替換歷史記錄中的最後一個狀態(我的json對象是我從ajax請求接收的html)。如果我使用推送狀態,假設我在頁面B上,並單擊一個按鈕,我的頁面現在更改爲aaa
,我推送狀態aaa
。然後,如果我點擊其他按鈕,我的頁面現在更改爲bbb
,我推送狀態bbb
。如果我現在點擊後退按鈕,我仍然會在頁面B,我的狀態History.Adapter.bind(window, 'statechange', function() {})
顯示爲aaa
,如果我再次單擊後退按鈕,我會去頁答:我不希望這種行爲。我想,如果我與狀態bbb
B頁面,點擊後,我會去頁A,如果我點擊着,我會去網頁B與國家bbb
。我希望這更有意義。請幫助
回覆:您的更新 - 我想你不想用歷史來跟蹤頁面B/A中「狀態的變化」。只能在您的網址更改時使用歷史記錄。任何狀態在一個網址(例如A vs B)中的變化應該通過另一種機制來保存狀態(而不是通過history.replaceState(); ...這對於像Backbone或者Angular這樣的MV *庫非常容易實現 – 1nfiniti 2013-05-06 17:03:52
Check out jquery-mobile,他們有一種處理頁面的方式,你可能會覺得很有用:http://jquerymobile.com/ – euxneks 2013-05-08 22:12:20