首页  >  问答  >  正文

单击后退按钮时阻止 Safari 缓存页面

单击后退按钮时,Safari 加载旧的 You Tube 视频时出现问题。我尝试将 onunload="" (此处提到 Preventing cache on back-button in Safari 5)添加到 body 标记,但在这种情况下不起作用。

有什么方法可以阻止 safari 从某个页面上的缓存加载吗?

P粉295728625P粉295728625271 天前377

全部回复(2)我来回复

  • P粉514001887

    P粉5140018872024-01-22 13:43:52

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

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

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

    '缓存控制','无缓存,max-age=0,必须重新验证,无存储'

    回复
    0
  • P粉495955986

    P粉4959559862024-01-22 09:58:12

    您的问题是由后退缓存引起的。当用户离开时,它应该保存页面的完整状态。当用户使用后退按钮导航回来时,可以非常快速地从缓存加载页面。这与仅缓存 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() 
        }
    });

    回复
    0
  • 取消回复