17

我有两个页面,A和B。流程如下:

  • 去A
  • javascript Ajaxes一堆内容添加到A,形成A'
  • 去乙
  • 按 [Back] 返回 A,而不是 A',没有所有 Ajaxed 内容

有没有其他人注意到这一点,如果是这样,你如何解决它?

如果 Chrome 在转到 B 之前缓存 A' 状态,并在后面重现 A',那将是可以接受的。如果 Chrome 简单地重新加载整个 A(包括将其转换为 A' 的 Ajax 请求),那也可以。当前的行为是加载一个旧的、不完整的 A 版本,这不是我想要的。

编辑:我知道它正在加载缓存版本,因为当我点击 [Back] 时服务器没有收到任何新请求。

4

3 回答 3

7

这个话题很老,但我想我会分享我的解决方案。为了让 Firefox、Chrome 和 Safari 的行为一致,您必须在返回时需要重新加载的页面上设置一个卸载处理程序,并使用缓存破坏标头。

例子

在 HTTP 标头中

Cache-Control: must-revalidate, no-store, no-cache, private

在页面的javascript中

$(window).unload(function(){}); // Does nothing but break the bfcache

阅读此处了解更多信息: http: //madhatted.com/2013/6/16/you-do-not-understand-browser-history

于 2014-12-10T23:32:32.200 回答
1

我知道这个话题很老,但这个问题的解决方案并不容易找到我只是浪费了几个小时来解决它。这两行代码为我解决了 Chrome 问题:

Response.Cache.SetCacheability(HttpCacheability.NoCache);

Response.Cache.SetNoStore();
于 2013-10-04T20:34:34.437 回答
0

好吧,如果您使用的是 xhr 请求而不是隐藏帧,则后退和前进按钮不会绑定到 xhr 请求

于 2012-04-10T21:29:24.297 回答