单击后退按钮时,Safari 加载旧的 You Tube 视频时出现问题。我尝试将 onunload="" (此处提到 Preventing cache on back-button in Safari 5)添加到 body 标记,但在这种情况下不起作用。
有什么方法可以阻止 safari 从某个页面上的缓存加载吗?
所有这些答案都有点破解。在现代浏览器(safari)中,仅在 onpageshow 解决方案上有效,
onpageshow
window.onpageshow = function (event) { if (event.persisted) { window.location.reload(); } };
但在慢速设备上,有时您会在重新加载之前看到一瞬间之前的缓存视图。处理这个问题的正确方法是在服务器响应上正确设置 Cache-Control ,如下所示
'缓存控制','无缓存,max-age=0,必须重新验证,无存储'
您的问题是由后退缓存引起的。当用户离开时,它应该保存页面的完整状态。当用户使用后退按钮导航回来时,可以非常快速地从缓存加载页面。这与仅缓存 HTML 代码的普通缓存不同。
当bfcache加载页面时,onload事件不会被触发。相反,您可以检查 onpageshow 事件的 persisted 属性。它在初始页面加载时设置为 false。当页面从 bfcache 加载时,它被设置为 true。
onload
persisted
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)中,仅在
onpageshow
解决方案上有效,但在慢速设备上,有时您会在重新加载之前看到一瞬间之前的缓存视图。处理这个问题的正确方法是在服务器响应上正确设置 Cache-Control ,如下所示
'缓存控制','无缓存,max-age=0,必须重新验证,无存储'
您的问题是由后退缓存引起的。当用户离开时,它应该保存页面的完整状态。当用户使用后退按钮导航回来时,可以非常快速地从缓存加载页面。这与仅缓存 HTML 代码的普通缓存不同。
当bfcache加载页面时,
onload
事件不会被触发。相反,您可以检查onpageshow
事件的persisted
属性。它在初始页面加载时设置为 false。当页面从 bfcache 加载时,它被设置为 true。Kludgish 的解决方案是在从 bfcache 加载页面时强制重新加载。
如果您使用 jQuery,则执行以下操作: