safari - 防止在 Safari 5 中的后退按钮上缓存

标签 safari cache-control

截至最近 safari 5 发布,结果导致我的网站出现一些问题。我有一个运行经典 ASP 的动态网站(尽管这应该无关紧要)并且该网站对历史堆栈进行了一些创造性的使用。例如,您可以在列出产品的页面上,然后转到有关产品的详细信息并更改产品(管理员 View )。当您单击产品上的保存时,信息将通过 AJAX 发送到服务器,并且 history.back()发出。这适用于所有浏览器(包括 safari <= 4),但是,在新发布的 safari 5 中它停止工作。似乎当您在 safari 5 中单击返回时,它实际上并没有刷新页面,它只是从缓存中加载它,这意味着不会显示在详细信息 View 中所做的更改。我如何才能在 safari 5 中进行这项工作?这是我必须关闭缓存的当前代码(包含在每个页面的顶部):

Dim pStr
pStr = "private, no-cache, no-store, must-revalidate"
Response.AddHeader "pragma","no-cache"      '?
Response.AddHeader "cache-control", pStr    '?  Er ikke sikker på om disse 3 siste er nødvendige.
Response.AddHeader "cache-control", "post-check=0, pre-check=0"     '?  Er ikke sikker på om disse 3 siste er nødvendige.
Response.AddHeader "Expires", "Mon, 26 Jul 1997 05:00:00 GMT"       '?
Response.AddHeader "Last-Modified", Now()

最佳答案

空的unload处理程序将不再工作。相反,您可以查看 persisted onpageshow 的属性(property)事件。它在初始页面加载时设置为 false。当页面从 bfcache 加载时,它被设置为 true。

Kludgish 解决方案是在从 bfcache 加载页面时强制重新加载。

window.onpageshow = function(event) {
    if (event.persisted) {
        window.location.reload() 
    }
};

如果您使用的是 jQuery,请执行以下操作:
$(window).bind("pageshow", function(event) {
    if (event.originalEvent.persisted) {
        window.location.reload() 
    }
});

关于safari - 防止在 Safari 5 中的后退按钮上缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5297122/

相关文章:

ios - iOS Safari 上的 GZIP 压缩总是 1.00 倍?

javascript - 破解 IE 8 后退按钮/强制重新发送?

cache-control - 找不到蒙德里安的 CacheControl 句柄

caching - 如何绕过客户端上的 Varnish 缓存?

jquery - 仅在 Safari 中显示跨度的奇怪高度问题

javascript - 动画 div 使 Edge/Safari 重绘/布局父容器

jquery - Safari jquery 兼容性

html - Safari中div宽度的差异

safari - Safari为什么不遵守我的缓存控制指令?

rest - 如果您已经拥有资源,为什么将 ETag 设置为 MUST 要求?