我想我现在明白你的描述了。
当我访问您网站上的 /page1.html 时,下载的 HTML 包含主要内容 + 标题 + 侧边栏。当我单击链接访问 /page2.html 时,AJAX 会加载页面并且下载的 HTML 仅包含主要内容。
因此,此时缓存包含完整的 /page1.html 和部分 /page2.html
现在,当我离开您的站点然后使用返回按钮返回时,浏览器会从缓存中获取 /page2.html。但这只是部分页面,您的网站会“中断”。
理想情况下,您希望浏览器仅在使用 XMLHttpRequest 请求时才获取部分内容。此外,如果部分页面和完整页面都可以缓存,那就太好了。
pjax_pjax=true
通过将参数附加到 AJAX 请求中的 URL 查询来解决此问题。我认为这应该只适用于大多数情况。
请注意,不要将此参数添加到传递给的 URL 中pushState()
。
另一种方法是始终下载整个页面,然后#main-view
在使用 AJAX 时提取。
当然,您可以通过切换到 PJAX 来解决其他人的问题(您需要使用该fragment
选项)。
另一个为您处理 pushState() 的 JS 库是我的HTMLDecor项目。使用 HTMLDecor,您的页面只包含主要内容 +<link>
到另一个(可能是共享的)包含页眉/页脚/侧边栏的 HTML 页面。HTMLDecor 从浏览器中将这些添加到页面中。当用户单击链接浏览到另一个页面时,HTMLDecor 使用 AJAX 和 pushState - 无需配置。当然,如果浏览器不支持 pushState,那么就会发生正常的链接导航。