Safari 上的 pageshow 事件

pageshow event on Safari

我有以下简单的 JavaScript,我需要它以便在页面重新加载时重新初始化一些变量,特别是当页面从 Safari BFCache 提供时:

jQuery(window).bind('pageshow', function(event) {
    // I could inspect event.originalEvent.persisted here to check for BFCache hits,
    // but it isn't required in this instance.

    // Do some initialisation here
});

假设用户遵循以下路径,导航到页面 B 和 C,然后浏览回(即使用后退按钮)页面 A:

A -> B -> A -> C -> A

pageshow 处理程序仅在第一次和第二次访问 A 时触发,即初始页面加载和第一次 BFCache 加载。所以从本质上讲,似乎从 BFCache 提供的页面触发 pageshow 一次且仅一次。

这是 Safari 上的预期行为吗?有什么解决办法吗?

要禁用 BFCache,您可以在 html 正文中添加 onunload="" 属性。

<body onunload=""></body>

我似乎通过绑定到 popstate 事件解决了这个问题:

jQuery(window).bind('popstate', function(event) {
    // Do some initialisation here
});

只要活动的历史条目发生变化就会触发。这似乎会持续触发而不是只触发一次,因此实现了每当用户登陆页面时执行重新初始化的目标,而不管到达那里的机制如何。