当页面被卸载时,我试图从 JavaScript 触发一个 JSF 支持 bean 函数。它在 IE 和 chrome 中运行良好,但在 Firefox 中运行良好。
这是onunload
事件在 XHTML 中触发的方式:
<h:body onunload="onPageUnload()">
<h:form id="theForm">
<p id="hiddenButton" style="display:none">
<h:commandLink id="hiddenCloseEvent" styleClass="button" action="#{theBean.doHiddenCloseEvent}">
<f:param name="action" value="CLOSE"/>
</h:commandLink>
</p>
...
</form>
</h:body>
收到卸载事件后,将执行以下 JavaScript。有2个版本,一个是针对IE的,一个是针对谷歌浏览器的。
IE版本:
function onPageUnload() {
if( detailPage == "false" ) {
document.getElementById('theForm:hiddenCloseEvent').click();
}
}
谷歌浏览器版本:
window.onbeforeunload = function(e) {
onPageUnload();
};
执行时onPageUnload()
,触发隐藏的输入按钮JSF组件点击事件,然后触发JSF backing bean, theBean
, 函数theBean.doHiddenCloseEvent
做一些处理。现在的情况是 JSF 函数在 IE 和 Google Chrome 版本中执行,但在 Firefox 中没有被触发,请问这个问题如何解决?
更新
我修改了如下代码:
function onPageUnload() {
if( detailPage == "false" ) {
alert('before');
document.getElementById('theForm:hiddenCloseEvent').click();
alert('after');
}
}
从上面的代码中我发现before
得到提示但after
没有提示。此测试用例验证组件是否在 Web 浏览器中不可见。