HTML5历史记录:完整页面加载后的后退按钮问题

时间:2011-09-12 22:17:15

标签: ajax html5 history back-button

我构建了一个使用AJAX和HTML5历史记录的网络应用程序(旧版浏览器支持history.js)。

我的应用程序中只有部分是通过后台javascript加载的(部分非常繁重,大部分时间都会使用)。通过常规链接访问其他页面,并且在加载这些页面时将发生整页重新加载。

当我稍微导航动态部分(URL更改并适合显示的内容)时,通过常规链接将其保留,然后点击浏览器后退按钮,发生奇怪的事情:只有最后一个XHR中加载的部分(在我的情况下,包含一些数据的div)显示没有布局和CSS。当我查看源代码(在Chromium和FF + Firebug中)时,DOM只包含所述div。

我预计浏览器会缓存DOM和其他信息,因此它可以重建上一页,或者它会重新加载最后一个URL(页面将按预期显示,因为它不是通过XHR加载它将在布局中呈现)。我试图在对XHR的响应上设置缓存控制头,但它没有帮助。

我整理了一个最小的例子http://moserei.de/html5_history/

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

我刚刚调查了一下,自己发现了问题。看起来Rails并不是特别擅长设置正确的缓存控制头。当我自己设置它们时(缓存控制,pragma = no-cache并在过去过期,请参阅第一个答案here),浏览器会尊重它并在常规请求中重新加载页面。

答案 1 :(得分:0)

这是名字冲突:

原始页面有2个状态,占用2个网址:

  1. http://moserei.de/html5_history/
  2. http://moserei.de/html5_history/xhr.html
  3. http://moserei.de/html5_history/xhr.html的XHR请求与原始页面之外的响应不同。现在,此网址http://moserei.de/html5_history/xhr.html与两件事相关联:

    1. 原始网址中的状态
    2. 通过XHR发送的分离内容
    3. 当需要从缓存中获取此URL时(当您单击后退按钮时),浏览器应该怎么做?很难说。我不确定历史规范中是否有明确定义的规则,所以尽量避免这种情况。