Javascript History.js window.onstatechange不';t火
我只是一个js初学者,所以也许我只是不太理解它。但是当您以前使用Javascript History.js window.onstatechange不';t火,javascript,pushstate,history.js,Javascript,Pushstate,History.js,我只是一个js初学者,所以也许我只是不太理解它。但是当您以前使用历史记录更改状态时,当您点击浏览器的后退/前进按钮时,窗口.onstatechange不应该启动吗 事实上,我在Firebug控制台中看到了对象的更改,但是窗口。onstatechange就是不会触发!另外-非常混乱-当我使用window.onpopstate时,对象不再改变(当使用后退/前进按钮时) 我是这样做的: $('.container').click(function(e) { e.preventDefau
历史记录更改状态时,当您点击浏览器的后退/前进按钮时,窗口.onstatechange
不应该启动吗
事实上,我在Firebug控制台中看到了对象的更改,但是窗口。onstatechange
就是不会触发!另外-非常混乱-当我使用window.onpopstate
时,对象不再改变(当使用后退/前进按钮时)
我是这样做的:
$('.container').click(function(e) {
e.preventDefault();
var title = $(this).data('title');
stateObj = { show: title }
History.pushState(stateObj, document.title, '?show=' + title);
}
window.onstatechange = function() {
var title = History.getState().data['show'];
alert('title');
}
我已经从中发现,我必须使用
History.Adapter.bind(window,'statechange',function(){
var title = History.getState().data['show'];
alert('title');
});
…这是可行的,但我还是不明白为什么window.onstatechange
不会启动
//编辑:
有什么建议吗?Lucian Poston于2012年4月在GitHub上回答了这个问题:
这似乎是History.Adapter事件模型的设计。看看适配器的实现,例如
当history.js引发“statechange”事件时,它会调用history.Adapter.trigger(),该函数通过先前对history.Adapter.bind()的调用来迭代事件处理程序设置列表。未按预期调用window.onstatechange()
实际上,History.Adapter.bind(window'statechange',function(){alert('oi');})设置window.onstatechange,以便在触发时调用History.Adapter.trigger(window'statechange'),后者反过来调用事件处理程序function(){alert('oi');}。如果像示例中那样重新定义window.onstatechange,它将破坏该行为