这是由后退前进缓存引起的。它可以在用户导航离开页面时保存完整状态。当用户使用后退按钮导航回来时,页面可以非常快地从缓存中加载。这与仅缓存HTML代码的常规缓存不同。
当页面被加载到后退前进缓存时,onload
事件不会被触发。相反,您可以检查onpageshow
事件的persisted
属性。它在初始页面加载时设置为false。当页面从后退前进缓存中加载时,它设置为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() { });
?
,您可以尝试将所有链接 URL 后添加?
。例如:href="next.html"
变成href="next.html?"
。这将向网络浏览器提供提示,即页面内容是动态的,重新访问该页面应该重新从服务器加载页面。这也适用于外部脚本。例如:src="mylib.js"
变成src="mylib.js?"
。 - Jay