【问题标题】:Stop Caching Window Object on back reload在重新加载时停止缓存窗口对象
【发布时间】:2015-05-11 06:48:58
【问题描述】:

假设页面 url /xyz。我在我的 JS 的顶部声明了 window 对象(因为我需要它),比如

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 元素。所以请确保它没有搞砸代码:)

提前致谢

【问题讨论】:

  • 它对我来说很好,使用 Firefox 37。请添加更多细节或尝试在 JSFiddle 中重现它。
  • 它对我来说也很好用,jsfiddle.net/r8nfvn8u/5。顺便说一句,你可以直接做 myObject 而不是 window.myObject 因为如果你不声明它默认被视为窗口对象
  • 我不这么认为。您可能还有一些未向我们展示的代码,或者您的第二个代码在第一个代码之后立即执行
  • 好的。刷新时工作正常,但后退按钮出现问题。更新问题。创建小提琴所以请给我一些 itme
  • 后退按钮通常会获取网站的缓存状态...

标签: javascript


【解决方案1】:

当您点击浏览器的后退按钮时,一些浏览器只会获得页面的缓存状态。这样可以节省一些资源,因为在浏览器历史记录中来回切换时,文档的状态通常不需要太大变化。

对此有一个简单的解决方法:添加一个带有虚拟函数的事件监听器,该函数在页面卸载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(){});

另请阅读

【讨论】:

  • 看起来不错,但不幸的是这仍然不起作用。我正在使用铬
  • 我找到了一个更简单的解决方案,请稍等。
  • 好的,所以我在 Firefox 37 中,它工作得非常好……也许其他人可以帮忙?
  • 酷。 +1 的答案,但仍在等待一个被接受的和无浏览器的解决方案。我也在对此进行广泛搜索。会让你知道
  • 是的,开始工作了。除了变量之外,它还缓存了我的隐藏元素,因此获得了不同的值,这并没有让我进一步处理。谢谢你的帮助伙伴:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-01
  • 2018-06-12
  • 1970-01-01
  • 2014-11-20
  • 1970-01-01
  • 2023-03-06
相关资源
最近更新 更多