Feature-detect bfcache?

Feature-detect bfcache?

本文关键字:bfcache Feature-detect      更新时间:2023-09-26

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

我对行为1或行为2都很满意,但对行为3就不满意了:

  1. 正确地恢复整个状态(像FF和Chrome做)
  2. 重新加载页面(因为它不应该被缓存),当前状态可以被重新创建,因为更改是通过Ajax推送到服务器的(IE8做到这一点)
  3. 但是IE10返回到初始的,未修改的页面(它保留表单输入,如果初始页面上有,但不是整个状态)

因为我很着急,我只是去强制重新加载,如果有人访问页面后做出DOM修改(那块信息存储在哈希),这是一个相当愚蠢的解决方案(FF和Chrome不需要重新加载,但现在做)。

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

保留一个备用副本以供比较/以防状态未恢复,这似乎是多余的,特别是因为在我们的情况下,这个问题可能会影响0.01%的用户。出于我的目的,如果状态没有完整地保存在bfcache中,强制重新加载就足够了。

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

如果已知浏览器user-agent/browser不保存修改后的状态,则可以刷新页面。

你也可以在状态被修改后的URL后面附加"#modified",所以如果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";