Javascript Safari上的pageshow活动

Javascript Safari上的pageshow活动,javascript,jquery,safari,bfcache,Javascript,Jquery,Safari,Bfcache,我有以下简单的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.

我有以下简单的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 fire
pageshow
服务的页面一次且仅一次


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

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

<body onunload=""></body>

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

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

当活动历史记录条目更改时激发。这看起来是一致的,而不是仅仅触发一次,因此实现了在用户登陆页面时执行重新初始化的目标,而不管到达页面的机制如何。

我不明白为什么要使用
pageshow
。您可以使用
$(function()){}
$(document).ready()
似乎有一个开放的错误:尚未找到解决方法…@GeorgiiIvankin您找到解决方法了吗?似乎是safari 10(以及最近的IOS)上的一个bug@ErikBaan不,不幸的是,我没有。不幸的是,这不是这个问题的解决方案:$(document).ready()只在初始DOM加载时启动;如果页面是从BFCache提供的,则不会触发。您可以在html正文中添加
onunload=“
属性吗?
unload
处理程序显然,我也在实验中发现了这一点。在Safari 10上对我不起作用。Popstate事件根本不会触发。