3

beforeunloadJavaScriptのイベント中にフォームを送信しています。すべてのブラウザで異なる方法で動作しています。Chrome 29 では、1 分以内にブラウザーを閉じるとサーバー側のアクションにヒットしますが、アプリケーションが 1 分以上アイドル状態になってからブラウザーを閉じると、サーバーにヒットしません。同様にIE10やFF20でも5分以上アイドル状態でいられません。

<script> 
    function updateServerCMIModel(item) {
        document.forms[0].itemID.value = item;
        formstring = top.window.CPFrame.showCurrentModelState("form");
        document.forms[0].data.value = formstring;
        document.forms[0].nextAction.value = top.window.frames.CPFrame.CPAPI.userEvent;
        document.forms[0].lmsAction.value = "update";
        document.forms[0].submit();
    }
</script>

この問題を解決する方法はありますか?

4

2 に答える 2

0

タイミングの問題です。フォームの投稿が成功するまで、ページの実際のアンロードを遅らせる方法が必要です。非常に典型的なハックは、フォームを投稿した後にユーザーにダイアログを表示し (「このページを離れてもよろしいですか?」)、ユーザーがクリックするまでに数秒かかることを期待することです。

これを行うには、イベント ハンドラーから選択したメッセージを含む文字列を返すだけです。

window.onbeforeunload = function(e) {
  doFormPost();
  return 'Dialog text here.';
};
于 2013-09-24T00:25:04.667 に答える