我们的调查向我们表明,并非所有浏览器都以统一的方式尊重http缓存指令.
出于安全原因,我们不希望在我们的应用程序某些网页缓存,有史以来,通过Web浏览器.这必须至少适用于以下浏览器:
我们的要求来自安全测试.从我们的网站注销后,您可以按后退按钮查看缓存页面.
你如何明确地检测用户是否按下了浏览器中的后退按钮?
如何使用#URL系统在单页Web应用程序中强制使用页内后退按钮?
为什么地球上没有浏览器按钮触发他们自己的事件!?
如果javascript修改了页面A中的DOM,则用户导航到页面B,然后点击返回按钮返回页面A.对页面A的DOM的所有修改都将丢失,并且向用户显示最初从服务器检索的版本.
它在stackoverflow,reddit和许多其他流行的网站上以这种方式工作.(尝试在此问题中添加测试评论,然后导航到不同的页面并点击返回按钮返回 - 您的评论将"消失")
这是有道理的,但一些网站(apple.com,basecamphq.com等)在某种程度上迫使浏览器为用户提供最新的页面状态.(转到http://www.apple.com/ca/search/?q=ipod,单击顶部的"下载"链接,然后单击"返回"按钮 - 将保留所有DOM更新)
来自哪里的不一致?
有人可以分享经验/代码我们如何检测浏览器后退按钮点击(对于任何类型的浏览器)?
我们需要满足所有不支持HTML5的浏览器
在标准的Java/SpringMVC/JSP/jQuery web-app中,我试图检测"Back"(或history.go(-1))事件,以便刷新(AJAX)摘要组件/面板内容时我返回到一个页面(我们可以在其中更改摘要组件显示的后端数据).
我在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>
Run Code Online (Sandbox Code Playgroud)
我正在运行OpenSUSE Linux并尝试使用FireFox和Chrome(最新版本),但每次将事件的persisted属性设置为false(我可以在JavaScript控制台中看到这一点,以及从上面的代码弹出的警报).每次,我的意思是,无论是从服务器加载还是通过后退按钮(或"后退"链接)再次显示.
我的目的是进行AJAX调用,如果通过"后退"按钮或history.go(-1)调用显示页面,则使用服务器的更新数据重新加载摘要组件/面板.
我也试过设置一个卸载处理程序(什么也不做),以防止页面被放入bfcache,但它似乎仍然显示bf-cached版本,并且event.persisted(或event.originalEvent.persisted)设置为false …
我想做的是刷新后退键上的视图。这样我的用户就可以看到更新的页面。
所以我尝试通过添加以下内容来禁用缓存:
spring.resources.cache.cachecontrol.no-cache=true
Run Code Online (Sandbox Code Playgroud)
然而,这不起作用。
javascript ×4
back-button ×2
ajax ×1
back ×1
caching ×1
firefox ×1
http ×1
http-headers ×1
https ×1
jquery ×1
pageshow ×1
spring-boot ×1
spring-mvc ×1
thymeleaf ×1
vue.js ×1