这是由后向缓存引起的。当用户导航离开时,它应该保存页面的完整状态。当用户使用后退按钮导航返回时,页面可以非常快速地从缓存中加载。这与只缓存 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() { });