当单击后退按钮时,safari加载旧的youtube视频时出现问题。我尝试将onunload="“(这里提到的Preventing cache on back-button in Safari 5)添加到body标记中,但在本例中不起作用。
有没有办法防止从某个页面上的缓存加载safari?
发布于 2012-10-29 22:31:00
您的问题是由back-forward cache引起的。当用户导航离开时,它应该保存页面的完整状态。当用户使用后退按钮返回时,页面可以非常快地从缓存中加载。这与普通的缓存不同,后者只缓存HTML代码。
为bfcache加载页面时,不会触发onload
事件。相反,您可以检查onpageshow
事件的persisted
属性。它在初始页面加载时设置为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()
}
});
发布于 2017-10-13 00:30:27
所有这些答案都有些曲解。在现代浏览器(safari)中,仅在onpageshow
解决方案上工作,
window.onpageshow = function (event) {
if (event.persisted) {
window.location.reload();
}
};
但在速度较慢的设备上,有时您会在重新加载之前看到前一个缓存视图的瞬间。处理这个问题的正确方法是在服务器上正确地设置Cache-Control来响应下面的一个
'Cache-Control', 'no-cache, max-age=0, must-revalidate, no-store'
发布于 2012-01-09 21:26:18
您可以使用锚点,并查看文档的位置href的值;
从http://acme.co/
开始,在位置后面加上一些东西,比如'#b';
所以,现在你的网址是http://acme.co/#b
,当一个人点击后退按钮时,它返回到http://acme.co
,间隔检查函数发现缺少我们设置的散列标记,清除间隔,并加载附加了时间戳的引用网址。
有一些副作用,但我会让你自己解决这些问题;)
<script>
document.location.hash = "#b";
var referrer = document.referrer;
// setup an interval to watch for the removal of the hash tag
var hashcheck = setInterval(function(){
if(document.location.hash!="#b") {
// clear the interval
clearInterval(hashCheck);
var ticks = new Date().getTime();
// load the referring page with a timestamp at the end to avoid caching
document.location.href.replace(referrer+'?'+ticks);
}
},100);
</script>
这是未经测试的,但它应该工作在最小的调整。
https://stackoverflow.com/questions/8788802
复制相似问题