这是由back-forward cache引起的。当用户导航离开时,它应该保存页面的完整状态。当用户使用后退按钮向后导航时,可以非常快速地从缓存中加载页面。这与仅缓存 HTML 代码的普通缓存不同。
当页面加载时 bfcacheonload
事件不会被触发。相反,您可以检查事件的persisted
属性onpageshow
。它在初始页面加载时设置为 false。当页面从 bfcache 加载时,它被设置为 true。
window.onpageshow = function(event) {
if (event.persisted) {
alert("From back / forward cache.");
}
};
出于某种原因,jQuery 在事件中没有这个属性。不过,您可以从原始事件中找到它。
$(window).bind("pageshow", function(event) {
if (event.originalEvent.persisted) {
alert("From back / forward cache.");
}
});
这些问题的快速解决方案是在按下后退按钮时重新加载页面。然而,这抵消了向后/向前缓存带来的任何积极影响。
window.onpageshow = function(event) {
if (event.persisted) {
window.location.reload()
}
};
作为旁注,您可以看到许多页面提供使用空onunload
处理程序作为解决方案。自 iOS5 以来,这不起作用。
$(window).bind("unload", function() { });