首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当单击“后退”按钮时,防止从缓存加载safari

当单击“后退”按钮时,防止从缓存加载safari
EN

Stack Overflow用户
提问于 2012-01-09 21:01:26
回答 6查看 90.6K关注 0票数 84

当单击后退按钮时,safari加载旧的youtube视频时出现问题。我尝试将onunload="“(这里提到的Preventing cache on back-button in Safari 5)添加到body标记中,但在本例中不起作用。

有没有办法防止从某个页面上的缓存加载safari?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-10-29 22:31:00

您的问题是由back-forward cache引起的。当用户导航离开时,它应该保存页面的完整状态。当用户使用后退按钮返回时,页面可以非常快地从缓存中加载。这与普通的缓存不同,后者只缓存HTML代码。

为bfcache加载页面时,不会触发onload事件。相反,您可以检查onpageshow事件的persisted属性。它在初始页面加载时设置为false。当页面从bfcache加载时,它被设置为true。

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

代码语言:javascript
复制
window.onpageshow = function(event) {
    if (event.persisted) {
        window.location.reload() 
    }
};

如果您使用的是jQuery,请执行以下操作:

代码语言:javascript
复制
$(window).bind("pageshow", function(event) {
    if (event.originalEvent.persisted) {
        window.location.reload() 
    }
});
票数 212
EN

Stack Overflow用户

发布于 2017-10-13 00:30:27

所有这些答案都有些曲解。在现代浏览器(safari)中,仅在onpageshow解决方案上工作,

代码语言:javascript
复制
window.onpageshow = function (event) {
    if (event.persisted) {
        window.location.reload();
    }
};

但在速度较慢的设备上,有时您会在重新加载之前看到前一个缓存视图的瞬间。处理这个问题的正确方法是在服务器上正确地设置Cache-Control来响应下面的一个

'Cache-Control', 'no-cache, max-age=0, must-revalidate, no-store'

票数 11
EN

Stack Overflow用户

发布于 2012-01-09 21:26:18

您可以使用锚点,并查看文档的位置href的值;

http://acme.co/开始,在位置后面加上一些东西,比如'#b';

所以,现在你的网址是http://acme.co/#b,当一个人点击后退按钮时,它返回到http://acme.co,间隔检查函数发现缺少我们设置的散列标记,清除间隔,并加载附加了时间戳的引用网址。

有一些副作用,但我会让你自己解决这些问题;)

代码语言:javascript
复制
<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>

这是未经测试的,但它应该工作在最小的调整。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8788802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档