这是由back-forward cache造成的。它应该在用户导航时保存页面的完整状态。当用户使用后退按钮浏览页面时,可以非常快速地从缓存加载。这与仅缓存HTML代码的普通缓存不同。
当页面加载bfcache onload
事件不会被触发。相反,您可以检查onpageshow
事件的persisted
属性。它在初始页面加载时设置为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() { });
如果还没有出现,您可能会尝试在所有链接网址后添加'?'。例如:'href =“next.html”'变成'href =“next.html?”'。这会给Web浏览器提示页面内容是动态的,并再次进入该页面应该再次从服务器重新加载页面。这也应该应用于外部脚本。例如:'src =“mylib.js”'变成'src =“mylib.js?”'。 – Jay 2012-09-18 06:52:22