功能检测bfcache?

Rub*_*ben 8 javascript caching

当使用后退按钮转到DOM已被修改的页面时,我对IE10中的这个问题感到惊讶:

对于行为1或2,我会很满意,但不是3:

  1. 正确恢复整个状态(如FF和Chrome一样)
  2. 重新加载页面(因为它不应该被缓存)并且可以重新创建当前状态,因为通过Ajax将更改推送到服务器(IE8执行此操作)
  3. 但IE10回到了初始的,未经修改的页面(它保留了表单输入,如果初始页面上有任何内容,但不是整个状态)

因为我赶时间,所以如果有人在进行DOM修改后访问页面(这条信息存储在哈希中),我就强迫重新加载,这是一个非常愚蠢的解决方案(FF和Chrome不需要重装,但现在做).

一个建议是使用localStorage来记住状态,我猜这种功能也被归入history.js.

保持备用副本以便进行比较/以防状态未恢复似乎过度,特别是因为在我们的情况下这是一个可能会影响0.01%用户的问题.就我的目的而言,如果状态尚未完全保存在bfcache中,则强制重新加载就足够了.

我可以"简单地"检测是否存在一个包含所有状态的bfcache?如果是这样,当有人回到DOM被修改的页面时,我可以强制重新加载吗?

小智 1

如果已知浏览器用户代理/浏览器未保存修改后的状态,您可以刷新页面。

您也可以在状态修改后将“#modified”附加到 URL,因此,如果 URL 包含“#modified”但状态为默认状态,您就知道应该刷新页面,因为状态无法正确缓存。

if(document.location.hash == "#HelloWorld")
{
    // Check if state is default
    // If state is default, the page should be refreshed
}
document.location.hash = "#HelloWorld";
Run Code Online (Sandbox Code Playgroud)