假设页面url / xyz。我在我的JS顶部声明了窗口对象(因为我需要它),如
window.myObject={
someWork:true
}
我正在改变属性值,如
if(window.myObject.someWork){
//Do Work
window.myObject.someWork=false
}
当我从其他页面(abc-> xyz)点击后退按钮时,我的window.myObject.someWork
仍然是假的,而不是在顶部再次重新初始化(因为我认为刷新会再次运行脚本)。你能否告诉你周围发生了什么以及如何解决这个问题。
经历了这个Does back/forward in the browser change javascript variables?。对此有任何修复?我正在使用Chrome,并希望能够在所有浏览器上运行
修正: Xufox解决方案很好并且工作。它还在后退按钮上缓存DOM元素。因此,请确保它没有搞砸代码:)
提前致谢
答案 0 :(得分:2)
当您点击浏览器的后退按钮时,某些浏览器只会获得页面的缓存状态。这节省了一些资源,因为在浏览器历史记录中来回传递时,文档的状态通常不需要改变太多。
有一个简单的解决方法:添加一个带有虚拟函数的事件监听器,该函数在页面卸载(beforeunload
或unload
时)时触发:
// either …
window.addEventListener('beforeunload',function(){});
// … or
window.addEventListener('unload',function(){});
unload
侦听器的任何外观似乎都清除了所有存储的变量和状态等。
window.myObject={
someWork:true
};
if(window.myObject.someWork){
//Do Work
window.myObject.someWork=false;
}
window.addEventListener('unload',function(){});