0

これが Javascript の問題なのか Vaadin の問題なのかわからないので、Vaadin フォーラムよりもここで質問するのが最善だと思いました。

ブラウザーが閉じられたときにすぐにリソースをクリーンアップするために (可能な場合)、Vaadin アプリケーションに次のコードを追加しました。

JavaScript.getCurrent().addFunction("catchClose", new JavaScriptFunction() {
private static final long serialVersionUID = 1L;
@Override
public void call(JSONArray arguments) throws JSONException {
    VaadinSession.getCurrent().close();
    /*causes detach() to be called which does all my cleanup*/
}
});

Page.getCurrent().getJavaScript().execute(
    "window.addEventListener('beforeunload', "
                + "function() {"
                + "var e = window.event;"
                + "e.returnValue = '';"
                + "catchClose(); "
                + "return '';"
            + "}, false);"
    );

また、Vaadin フォーラムのこの投稿で説明されているように、イベント リスナーを追加するのではなく、onbeforeunload 関数を直接設定しようとしました。

Firefox では、これは期待どおりに機能し、イベントはサーバーに送り返され、ページを離れたいかどうかをユーザーに尋ねるプロンプトは表示されません。彼らを去らせてください。

ただし、IE 10 (および Chrome ですが、現時点では IE 10 のみが関連しています) ではメッセージが送信され、Vaadin セッションが閉じられますが、ユーザーに退出するかどうかを確認するよう求められます。私はすでにセッションを閉じているので、彼らが留まることを選択した場合、これは明らかにいくつかの大きな問題を引き起こすでしょう.

onbeforeunload イベントに関する IE のドキュメントによると、空の値を返す場合、ダイアログは表示されません。空の文字列を返すことに加えて、プロンプトのメッセージをそれぞれ「null」と「false」に設定したnullとを返すことも試みました。また、をまったくfalse設定せずに、またはを に設定して、上記の試行のさまざまな順列を組み合わせて試しました。e.returnValuee.returnValuenullfalse

つまり、問題は、IE 10 で「退出してもよろしいですか」というプロンプトが表示されないようにするには、上記のコードをどのように変更する必要があるかということです。Javascript に何か問題がありますか、それとも IE のドキュメントで見逃したものがありますか?

ありがとう!

4

1 に答える 1

0

私が推測している空の値を返すことは、未定義を返すと言う不明確な方法です...あなたの関数は、式が未定義と評価される場所で、return;値なしで、、、return undefined;またはreturn expression;、と言う必要があります(たとえば、、window.vrenifbruwfgwなどvoid(0)...)

于 2013-11-07T18:08:46.683 に答える