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>

unload イベントが受信されると、以下の JavaScript が実行されます。IE 用と Google Chrome 用の 2 つのバージョンがあります。

IE バージョン:

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

Google Chrome のバージョン:

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

が実行されるonPageUnload()と、非表示の入力ボタン JSF コンポーネントのクリック イベントがトリガーされ、JSF バッキング BeantheBean関数が起動theBean.doHiddenCloseEventされて何らかの処理が行われます。現在、JSF 関数は IE および Google Chrome バージョンでは実行されていますが、Firefox ではトリガーされていません。この問題を解決する方法を教えてください。

アップデート

以下のようにコードを修正しました。

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

before上記のコードから、 get プロンプトは表示されますが、プロンプトが表示されないことがわかりましたafter。このテスト ケースは、コンポーネントが Web ブラウザーに表示されないかどうかを検証します。

4

1 に答える 1

0

これは、Firefox 特有の問題だと思います。onbeforeunloadFFのケータリングに使用することをお勧めします。

Firefox フォーラムここも参照してください。onbeforeunloadただし、すべてのブラウザでサポートされているわけではありません

両方のイベントを使用して、両方のベースをカバーできます。

于 2012-11-02T06:30:10.973 に答える