1

当页面被卸载时,我试图从 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 浏览器中不可见。

4

1 回答 1

0

我相信这是 Firefox 的一个特殊问题。建议你onbeforeunload用来迎合FF。

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

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

于 2012-11-02T06:30:10.973 回答