在重新加载时停止缓存窗口对象

时间:2015-05-11 06:48:58

标签: javascript

假设页面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元素。因此,请确保它没有搞砸代码:)

提前致谢

1 个答案:

答案 0 :(得分:2)

当您点击浏览器的后退按钮时,某些浏览器只会获得页面的缓存状态。这节省了一些资源,因为在浏览器历史记录中来回传递时,文档的状态通常不需要改变太多。

有一个简单的解决方法:添加一个带有虚拟函数的事件监听器,该函数在页面卸载beforeunloadunload时)时触发:

// 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(){});

另请阅读