这是我的情景,
我有“myPage.xhtml”页面,我添加了一个 java脚本来捕获浏览器/选项卡关闭事件。哪个实习生使用执行注销方法调用 的 remoteCommand
<!DOCTYPE html>
<html xmlns="http://www.w3c.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:pm="http://primefaces.org/mobile"
xmlns:fn="http://java.sun.com/jsp/jstl/functions">
<f:view >
<h:head>
<meta name="metaport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<h:outputStylesheet library="mylib" name="css/queries.css" />
<script lang="JavaScript">
window.onbeforeunload = confirmExit;
function confirmExit()
{
warnUser();
}
</script>
<f:view renderKitId="MOBILE_KIT" />
</h:head>
<h:body id="body">
<pm:page id="myPage">
<pm:header title="" styleClass="header">
<h:graphicImage library="img" name="images/logo.png"
styleClass="logo" />
<h:outputLink id="menu-bar" styleClass="menu_float">
<span id="menu_float" class="menu-icon"> <span></span>
</span>
</h:outputLink>
</pm:header>
<pm:content styleClass="content">
<h:form prependId="false">
<p:remoteCommand name="warnUser" actionListener="#{myModel.logout()}" />
</h:form>
</pm:content>
</pm:page>
</h:body>
</f:view>
</html>
我在 eclipse 中启动了网页,并使用url的localhost:8081 / myapp或来自同一台机器的http://176.124.xxx.xxx:8082/myapp进行访问,在浏览器/标签关闭事件和注销时调用方法调用完了。
但是,如果我尝试从其他计算机访问URL http://176.124.xxx.xxx:8082/myapp并尝试相同的方案,则不会触发注销方法。
有什么我错过了,我有点困惑。为什么它不起作用?
更新
我发现了这个问题。我已经修改了脚本,通过暂时关闭页面来确定事件是否实际被触发。
<script lang="JavaScript">
window.onbeforeunload = confirmExit;
function confirmExit()
{
warnUser();
return "do you want to close";
}
</script>
在这种情况下,我发现几秒后就会调用logout方法。因为脚本中弹出的用户确认页面没有立即关闭,所以页面会关闭。
还有其他办法可以解决这个问题吗?