2

我有一个非常简单的测试用例来解释问题。

这是我在 Rails 中的 ERB 文件中显示的页面。

<div><%=rand%></div>

<p><a href="http://google.com">Go</a></p>

为了显示错误,我加载了页面。我注意到随机数显示为rand1。我点击谷歌链接。我单击浏览器的“返回”按钮。我注意到随机数显示为rand2

这就是问题所在:在 Firefox 和 Chrome 中,rand1 != rand2 (总是)。在 Safari 和 IE 中,rand1 == rand2(总是)。

为什么浏览器中的差异?为什么 Safari 和 IE 缓存 Rails 的输出,而其他两个浏览器没有?如何让 Safari 和 IE 刷新页面?

(这是一个显示问题的简单测试用例 - 这对我的 Backbone 应用程序有影响)。

4

2 回答 2

2

显然,IE 和 Safari 似乎正在缓存来自服务器的响应;只要您的浏览器配置正确,您就可以通过更改响应中的 Cache-Control 标头来更改此设置。

另一个 Stack Overflow 帖子显示了执行此操作的适当方法,尽管在 Rails 3 中有一个快捷方法可以完成此操作:您可以expires_now在控制器操作中调用以避免手动设置所有这些标头。

于 2012-07-26T15:37:44.940 回答
0

WebKit 尤其具有积极的页面缓存策略,可以准确地处理您所描述的情况(单击链接,然后立即单击后退按钮)。这个想法是通过不仅缓存资源而且缓存 DOM 和页面的其他状态,使后退动作几乎立即发生。您可以在这两篇文章中了解它:

您也许可以使用load/unloadpageshow/pagehide事件的组合来完成您需要的事情。

我不确定 IE 是否实现了类似于 WebKit 的东西,但也许这也能解决它。

于 2012-08-06T13:02:53.737 回答