我用(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