PJAX:后退按钮问题

fed*_*lov 22 webkit browser-history pjax popstate

我们的一些链接由PJAX包装.当用户单击PJAX链接时,服务器仅返回HTML的必需部分.

如果我执行以下操作:

  1. 单击PJAX链接
  2. 点击简单链接
  3. 按后退按钮

浏览器将显示PJAX请求返回的内容.HTML将被破坏,因为它只是要显示的HTML的一部分(请查看此问题).

我们试图通过不缓存PJAX响应(Cache-Control标题)来解决这个问题.这解决了我们的问题,但提出了另一个问题:当用户按下后退按钮时,WebKit(Chrome 20.0)从服务器加载完整内容,然后触发popstate导致不必要的PJAX请求的事件.

是否可以重新创建正确的后退按钮行为?

小智 3

这一切都取决于服务器缓存设置。您的浏览器缓存来自服务器的 AJAX 响应,当您单击“后退”按钮时,它会使用缓存的版本。

为了防止在服务器上缓存设置以下标头:

'Cache-Control' => 'no-cache, no-store, max-age=0, must-revalidate'
'Pragma' => 'no-cache'
Run Code Online (Sandbox Code Playgroud)

如果您使用 Rails,那么一定要尝试 Wiselinks https://github.com/igor-alexandrov/wiselinks。它是浏览器状态管理的瑞士军刀。以下是一些详细信息:http://igor-alexandrov.github.io/blog/2013/07/11/the-way-to-wiselinks-1-dot-0/