Javascript History.js window.onstatechange不';t火

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

我只是一个js初学者,所以也许我只是不太理解它。但是当您以前使用
历史记录更改状态时,当您点击浏览器的后退/前进按钮时,
窗口.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,它将破坏该行为