Chrome后退按钮:仅提供初始页面的缓存版本,不包含任何Ajaxed内容

时间:2012-04-10 21:22:27

标签: javascript ajax caching google-chrome

我有两页,A和B.流程如下:

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

有没有人注意到这一点,如果有,你如何解决?

如果Chrome在转到B之前缓存A'状态,并且在返回时再现A',那将是可以接受的。如果Chrome只是重新加载了整个A(包括将其转换为A'的Ajax请求),那也是可行的。当前的行为,即加载旧的,不完整的A版本,并不是我想要的。

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

3 个答案:

答案 0 :(得分:5)

这个话题很老但我想我会分享我的解决方案。要使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

答案 1 :(得分:1)

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

Response.Cache.SetCacheability(HttpCacheability.NoCache);

Response.Cache.SetNoStore();

答案 2 :(得分:0)

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