9

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

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

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

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

一个建议是使用 localStorage 来记住状态,我猜这种功能也包含在history.js中。

保留一份备用副本以供比较/以防状态未恢复似乎有点过头了,特别是因为在我们的案例中,这可能会影响 0.01% 的用户。就我的目的而言,如果状态尚未完全保存在 bfcache 中,则强制重新加载就足够了。

我可以“简单地”检测是否存在包含所有状态的 bfcache 吗?如果是这样,当有人返回到其 DOM 已修改的页面时,我可以在没有它的情况下强制重新加载?

4

1 回答 1

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";
于 2014-01-21T05:22:33.183 回答