繁体   English   中英

为什么JSF支持bean函数不能在Firefox中从JavaScript调用而在IE和Chrome中可以正常工作?

[英]Why JSF backing bean function not call from JavaScript in Firefox but working fine in IE and Chrome?

我正在尝试在卸载页面时从JavaScript触发JSF支持bean函数。 在IE和chrome中可以正常工作,但在Firefox中则不能。

这是在XHTML中如何触发onunload事件的方法:

<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>

收到unload事件时,将执行以下JavaScript。 有2个版本,一个用于IE,另一个用于Google Chrome。

IE版本:

function onPageUnload() {
  if( detailPage == "false" ) {
    document.getElementById('theForm:hiddenCloseEvent').click();
  }
}

Google Chrome版本:

window.onbeforeunload = function(e) {
  onPageUnload();
};

onPageUnload()执行时,它将触发隐藏的输入按钮JSF组件click事件,然后触发JSF后备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浏览器中是否不可见。

我相信这是Firefox的特殊问题。 建议您使用onbeforeunload来满足FF的需求。

请参阅Firefox论坛以及此处 尽管并非所有浏览器都支持onbeforeunload

您可以使用两个事件来覆盖两个基础。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM