单击“后退”按钮时防止从缓存加载Safari

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (137)

当单击“后退”按钮时,Safari在加载旧YouTube视频时遇到了问题。我尝试过添加onunload=“”(这里提到过),但在这种情况下,它不起作用。

有什么方法可以防止从某个页面的缓存中加载Safari吗?

提问于
用户回答回答于

当用户导航时,它应该保存页面的完整状态。当用户导航回退按钮页时,可以非常快地从缓存中加载。这与普通缓存不同,后者只缓存HTML代码。

当页面加载到bfcache时onload事件不会被触发。相反,您可以检查persisted属性的onpageshow事件。在初始页面加载时,它被设置为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浏览器不像Firefox和Chrome那样处理后退/前移按钮缓存。特别是,像Vimeo或YouTube这样的视频很难缓存,尽管有一个新的iframe.src。

我找到了三种方法来处理这件事。为你的案子选择最好的。在Firefox 53和Safari 10.1上测试解决方案

1.检测用户是否使用“后退/前移”按钮,然后通过替换src重新加载整个页面或仅重新加载缓存的iframes。

if (!!window.performance && window.performance.navigation.type === 2) {
            // value 2 means "The page was accessed by navigating into the history"
            console.log('Reloading');
            //window.location.reload(); // reload whole page
            $('iframe').attr('src', function (i, val) { return val; }); // reload only iframes
        }

2.如果缓存页面,则重新加载整个页面

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

3.从历史记录中删除该页,以便用户不能再次通过后退/转发按钮访问该页

$(function () {
            //replace() does not keep the originating page in the session history,
            document.location.replace("/Exercises#nocache"); // clear the last entry in the history and redirect to new url
        });

所属标签

可能回答问题的人

  • 嗨喽你好

    7 粉丝480 提问8 回答
  • 人生的旅途

    10 粉丝484 提问7 回答
  • uncle_light

    5 粉丝518 提问7 回答
  • 无聊至极

    4 粉丝504 提问6 回答

扫码关注云+社区

领取腾讯云代金券