我使用(https://github.com/browserstate/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);
}
如果我manageHistory()
在我的 ajax 调用之后调用,那么History.Adapter.bind
回调方法会被正确调用。但是,如果我向后单击浏览器,然后单击前进按钮,导致页面导航从 B 到 A,然后 A 返回到 BHistory.Adapter.bind
,则不会调用内部的回调方法。这发生在 chrome 和 IE9 上。任何人都知道如何解决这个问题,我需要让State
点击后浏览器返回然后转发,以更新我的 DOM。请帮忙
注意:我为html4 浏览器 IE9使用版本 1.7.1 jquery.history.js
更新(2013 年 5 月 3 日):多谈谈我的要求
对不起,我正忙于其他任务,直到现在我有时不得不看这个问题。因此oncomplete
,在 ajax 调用中,我获取了返回给我的信息,并将其推送到状态。我的要求是:如果我从页面 A 导航到页面 B,然后在页面 B 上,我执行导致 DOM 操作的 ajax 请求的数量(让调用每个导致 DOM 操作的 ajax 请求 a state
)。如果我点击后退按钮,我应该回到页面 A,如果我点击前进按钮,我应该回到页面 B,我处于最后的状态。
所以我的想法是,oncomplete
在我的 ajax 请求中,我会用我当前的状态替换历史中的最后一个状态(我的 json 对象是我从 ajax 请求中收到的 html)。如果我使用推送状态,假设我在页面 B 上,然后单击一个按钮,我的页面现在变为aaa
,我 pushState aaa
。然后,如果我单击其他按钮,我的页面现在变为bbb
,我 pushState bbb
。如果我现在点击后退按钮,我仍然会在页面 B 上,我的状态History.Adapter.bind(window, 'statechange', function() {})
显示为aaa
,如果我再次点击后退按钮,我会转到页面 A。我不想要这种行为。我希望如果我在带有 state 的页面 B 上bbb
,然后单击返回,我会转到页面 A,如果我单击前进,我会转到带有 state 的页面bbb
B。我希望这更有意义。请帮忙