Chrome历史记录API问题

时间:2011-11-23 10:35:49

标签: javascript google-chrome xmlhttprequest browser-history

我的网站问题是Chrome。

大多数网站使用ajax / xmlhttprequest进行页面加载,使用历史API来启用后退按钮。只有页面内容随请求而变化,菜单等永远不会重新加载。这只是重新重新启动上一页的ajax请求。这一切都正常,直到有人在查看博客后单击后退按钮。博客没有加载ajax,它只是一个标准链接。

在Firefox中,如果我转到博客,请按回网站正确加载。加载了导航的主页面,也是要在其中查看的页面。

在Chrome中,如果我按下博客中的后退按钮,则不会加载“外部”页面,只会显示ajax请求的内容。您可能需要查看它才能完全理解。

这是Chrome或我的工作中的错误吗?我似乎无法返回到使用xmlhttprequest部分加载的页面,因为只加载了请求的项目。

该网站位于:http://www.basmooarc.com

由于

里克

1 个答案:

答案 0 :(得分:4)

简短回答

为XHR响应添加Cache-Control: no-store HTTP标头。

长答案

我很确定这是Chrome中的一个错误。我在我的应用程序中发现了完全相同的错误,它在Firefox中正常工作但在Chrome中中断。我认为问题在于,当您按下后退按钮时,Chrome会缓存XHR响应并从缓存中提供响应。我的应用使用了Etags,但Chrome并不打算查看Etag。它只使用缓存的响应,它缺少所有外部内容。到目前为止,我提出的最佳解决方案是将no-store添加到XHR响应的缓存控制标头中。

您可以通过Chrome的net-internals页面查看该行为。在URL栏中键入chrome://net-internals,打开“事件”选项卡,然后完成重现错误的步骤。当您转到非ajax页面然后按后退按钮时,您会看到一个URL_REQUEST条目,其中包含您尝试访问的网页的网址,但Chrome只会检查缓存,就是这样。与该URL的正常请求形成对比。正常的一个将有一个缓存检查,然后是一个HTTP_TRANSACTION_SEND_REQUEST部分,这是Chrome发出实际HTTP请求的地方。