有没有办法以编程方式检测用户何时按下浏览器中的F5按钮?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有办法以编程方式检测用户何时按下浏览器中的F5按钮?相关的知识,希望对你有一定的参考价值。
我有一个缓存,我想在浏览器中发出F5请求时无效。我正在运行JSF 2.0应用程序。有没有办法做到这一点?
使用FacesContext.getCurrentInstance().isPostBack()
检查页面请求是否是同一页面的重新加载。一个理想的地方是在<f:viewAction/>
(新的JSF-2.2)或preRenderView
事件。
- 定义支持bean方法
public static boolean isPostback() { return FacesContext.getCurrentInstance().isPostback(); }
- 使用其中之一
<f:viewAction/>
<f:metadata> <f:viewAction action="#{bean.isPostBack}" onPostBack="true"/> </f:metadata>
f:event
<f:metadata> <f:event type="preRenderView" listener="#{bean.isPostBack}"/> </f:metadata>
要么
您可以完全跳过整个支持bean isPostBack
检查并直接从页面直接执行缓存清除方法。
<f:viewAction/>
<f:metadata> <f:viewAction action="#{bean.clearCache}" rendered="#{facesContext.postBack}" onPostBack="true"/> </f:metadata>
f:event
<f:metadata> <f:event type="preRenderView" rendered="#{facesContext.postBack}" listener="#{bean.clearCache}"/> </f:metadata>
这种方法的好处是您可以编写更少的代码,并且只有在请求回发后,您的缓存清除机制才会执行
我认为这将有助于您使用密钥代码检测任何按键。
请参阅此链接以获取密钥代码。 https://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/ui/Keyboard.html
<rich:hotKey key="f5" onkeydown="if (event.keyCode == 116) return false;" handler="return false;" disableInInput="true" />
<rich:hotKey key="ctrl+R" onkeydown="if (event.keyCode == 123) return false;" handler="return false;" disableInInput="true" />
<rich:hotKey key="ctrl+f5" onkeydown="if (event.keyCode == 154) return false;" handler="return false;" disableInInput="true" />
我在the BootsFaces demo collection on GitHub上传了一个正在运行的F5探测器项目并编写了a short blog post。基本上,Kolossus的答案是正确的。 ViewAction也会在第一页加载时触发,所以我添加了几行来检测它。
我找到了一个我在beyondjava上实现的解决方案
<f:metadata>
<f:viewAction action="#{f5Detector.checkF5}" onPostBack="true"/>
</f:metadata>
Java类(刚刚将ManagedBean更改为Named)
import javax.enterprise.context.SessionScoped;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import javax.inject.Named;
@SessionScoped
@Named
public class F5Detector {
private String previousPage = null;
public void checkF5() {
String msg = "";
UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot();
String id = viewRoot.getViewId();
if (previousPage != null && (previousPage.equals(id))) {
// It's a reload event
}
previousPage = id;
}
}
以上是关于有没有办法以编程方式检测用户何时按下浏览器中的F5按钮?的主要内容,如果未能解决你的问题,请参考以下文章
iOS5通知下拉菜单:有没有办法知道用户何时按下iPhone上我的应用程序通知上的清除按钮?
检测用户何时向左或向右滑动以在 WKWebView 上前后移动