在一个标准的Java / SpringMVC / JSP / jQuery web应用程序中,我试图检测“返回”(或history.go(-1))事件,以便在我返回到页面时刷新(AJAX)摘要组件/面板的内容(我们可以更改由摘要组件显示的后端数据)。
我尝试了以下JavaScript代码(根据StackExchange上的一些帖子来实现此功能):
我尝试了以下JavaScript代码(根据StackExchange上的一些帖子来实现此功能):
<script type="text/javascript">
$(document).ready(function() {
window.onpageshow = function(event) {
console.log("Event:");
console.dir(event);
if (event.persisted) {
alert("non-jQuery - back to page - loaded from bfcache");
} else {
alert("non-jQuery - loaded page from server");
}
};
$(window).on("pageshow", function(event){
console.log("Event:");
console.dir(event);
if (event.originalEvent.persisted) {
alert("jquery - back to page - loaded from bfcache");
} else {
alert("jquery - loaded page from server");
}
});
});
</script>
我正在使用OpenSUSE Linux,并尝试了FireFox和Chrome(最新版本),但每次事件的persisted
属性被设置为false
时(我可以在JavaScript控制台中看到这一点,并通过上面代码弹出的警报进行确认)。无论是从服务器加载还是通过“后退”按钮(或“返回”链接)再次显示,都是如此。
我的目的是,如果页面通过“后退”按钮或history.go(-1)
调用显示,则使用AJAX调用从服务器重新加载摘要组件/面板以更新数据。
我还尝试设置一个不执行任何操作的卸载处理程序,以防止页面被放入bfcache中,但它似乎仍然显示bf-cached版本,并且event.persisted
(或event.originalEvent.persisted
)被设置为false
。
这个属性在Linux上被正确管理吗? 我的代码有什么问题吗? 任何帮助或想法将不胜感激,谢谢!
Cache-Control: no-cache, must-revalidate, max-age=0
)。浏览器从未真正重新加载页面(通过Wireshark检查),而event.persisted始终为false。 - giskard22