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

Chrome back button: only giving cached version of initial page, without any Ajaxed content

本文关键字:版本 缓存 内容 Ajaxed 任何 按钮 Chrome      更新时间:2023-09-26

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

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

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

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

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

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

我知道

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

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();

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