Safari上的pageshow活动

时间:2015-11-19 12:41:30

标签: 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.

    // Do some initialisation here
});

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

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

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

这是Safari上的预期行为,有没有解决方法呢?

2 个答案:

答案 0 :(得分:1)

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

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

在活动历史记录条目更改时触发。这似乎始终如一,而不仅仅是一次,因此无论用户何时登陆,都可以实现在用户登陆页面时执行重新初始化的目标。

答案 1 :(得分:0)

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

<body onunload=""></body>