History.js窗口.Onstatechange不着火
History.js window.onstatechange doesn't fire
我只是一个js初学者,所以也许我只是不理解它的权利。但是当你以前用History.stateObj
改变状态时,当你点击浏览器的后退/前进按钮时,window.onstatechange
不应该着火吗?
我实际上看到对象改变在Firebug控制台,但window.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
不会开火?!
//编辑:在Github上打开一个ticket
有什么建议吗
Lucian Poston于2012年4月在GitHub上回答了这个问题:
这似乎是历史的设计。适配器事件模型。查看一下适配器的实现,例如https://github.com/balupton/history.js/blob/master/scripts/uncompressed/history.adapter.native.js
当history.js引发一个'statechange'事件时,它会调用History.Adapter.trigger(),它会迭代一系列通过之前调用History.Adapter.bind()设置的事件处理程序。Window.onstatechange()未按预期调用。
实际上,History.Adapter。Bind (window, 'statechange', function(){alert('oi');})设置窗口。onstatechange,这样如果被触发,它将调用History.Adapter。触发(window, 'statechange'),然后调用事件处理程序function(){alert('oi');}。如果你重新定义窗口。在你的例子中,它会破坏这种行为。
- 可以't让我的if语句处理js中的html表单输入
- 使用agility.js进行页面布局和合成
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 强制模板刷新ember.js
- 如何编写HTML输入的JS内联
- Angular JS IE9 Hashbang url rewriting
- 使用JS将数组转换为json对象
- Node.js v6.2.0类扩展不是函数错误
- 当js函数's已执行
- 要求未定义JS回调参数
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- 如何从Java/scala调用js美化程序
- 如何更改<svg>标记为<img>用js标记
- 如何使用 node.js 比较两个 json 数组
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- History.js窗口.Onstatechange不着火
- js - onstatechange not triggering
- History.js的onstatechange在IE7中不起作用