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
});
只要活动的历史条目发生变化就会触发。这似乎会持续触发而不是只触发一次,因此实现了每当用户登陆页面时执行重新初始化的目标,而不管到达那里的机制如何。
我有以下简单的 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
});
只要活动的历史条目发生变化就会触发。这似乎会持续触发而不是只触发一次,因此实现了每当用户登陆页面时执行重新初始化的目标,而不管到达那里的机制如何。