Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax HTML5历史记录:完整页面加载后返回按钮出现问题_Ajax_Html_History_Back Button - Fatal编程技术网

Ajax HTML5历史记录:完整页面加载后返回按钮出现问题

Ajax HTML5历史记录:完整页面加载后返回按钮出现问题,ajax,html,history,back-button,Ajax,Html,History,Back Button,我构建了一个web应用程序,它使用AJAX和HTML5历史记录(对于较旧的浏览器有一个回退) 我的应用程序只有一部分是通过后台javascript加载的(这个部分很重,大部分时间都会用到)。其他页面通过常规链接访问,加载这些页面时将重新加载整个页面 当我浏览动态部分时(URL会改变并适合显示的内容),通过常规链接将其保留,然后点击浏览器后退按钮,奇怪的事情发生了:只有在上一个XHR中加载的部分(在我的例子中是包含一些数据的div)显示出来,没有布局和css。当我查看源代码时(在Chromium和

我构建了一个web应用程序,它使用AJAX和HTML5历史记录(对于较旧的浏览器有一个回退)

我的应用程序只有一部分是通过后台javascript加载的(这个部分很重,大部分时间都会用到)。其他页面通过常规链接访问,加载这些页面时将重新加载整个页面

当我浏览动态部分时(URL会改变并适合显示的内容),通过常规链接将其保留,然后点击浏览器后退按钮,奇怪的事情发生了:只有在上一个XHR中加载的部分(在我的例子中是包含一些数据的div)显示出来,没有布局和css。当我查看源代码时(在Chromium和FF+Firebug中),DOM只包含上述div

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

我列出了一个最小示例:


谢谢你的帮助

这是名称上的冲突:

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

  • http://moserei.de/html5_history/
  • http://moserei.de/html5_history/xhr.html
  • XHR请求http://moserei.de/html5_history/xhr.html
    的响应与原始页面不同。现在这个URL
    http://moserei.de/html5_history/xhr.html
    与两件事相关:

  • 原始URL中的状态
  • 通过XHR发送的单独内容

  • 当浏览器需要从缓存中获取此URL时(当您单击“上一步”按钮时),它应该做什么?很难说。我不确定历史规范中是否有定义良好的规则,所以请尽量避免这种情况。

    你说得对,URL
    http://moserei.de/html5_history/xhr.html
    代表两种不同的含义。但在我看来,浏览器不应该直接显示通过XHR加载的内容。因此,它应该尝试定期重新加载它,当XHR响应上的标题禁止缓存时就会这样做(参见我自己的答案)。如果用户通过AJAX访问
    /XHR.html
    ,然后刷新页面怎么办?用户希望显示相同的内容。因此,当您使用历史API在URL之间切换时,通常要确保每个URL都可以通过AJAX状态更改和完整页面请求来访问。你能把这些文件上传到github上吗?希望你还有。