ページがアンロードされているときに、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 ブラウザーに表示されないかどうかを検証します。