我有一个包含iframe的页面。 iframe可以接受用户的输入(通过按钮点击或菜单选择)并相应地显示内容。 我需要的是,当用户操作iframe时,浏览器将每组iframe参数推入历史;当用户点击后退按钮时,iframe将使用上一个历史记录条目中保存的参数重新加载其内容。我有一段代码进行重新加载,如下所示。需要两次点击后退按钮才能触发popstate/statechange事件
奇怪的是,当我在IFRAME(添加到历史,因此多状态条目)进行多项设置,然后单击回来,它会像这样工作
说,我的状态4 ,3,2的历史和我现在在状态5
- 第一次点击恢复到状态4(“----状态改变----”日志消息被打印
- 第二点击重新加载默认内容的iframe,“---- state changed ----”不会被打印,不会重新加载代码
- 第三次点击恢复到状态3
- 第四点击,就如同第二点击
- 5日点击恢复到状态2
所以以后每一次点击,成功地恢复状态,需要两次点击来触发popstate事件(我也试过statechanged事件,结果相同)并恢复到另一个先前的状态。
任何人都知道这里发生了什么?提前致谢。
History.Adapter.bind(window, "popstate",
function (event) {
console.log("----state changed------", History.getState());
console.log("----state data------",History.getState().data.state);
//code to do reload an iframe to its proper state
});
如果你想用你的'iframe'来做更复杂的事情,比如POST,这是行不通的。我的意思是这是可能的,但它需要一个非常完整的脚本(以处理所有边界情况)通过Ajax执行POST。此时,您甚至不需要设置iframe的网址,但只需更新它的内容,此时这个简单的解决方案可悲地变得没有实际意义。 :/我仍然在寻找一种更简单的方法来处理... – Domi