2017-01-03 6 views
1

ブラウザを閉じるかタブを閉じるとデータを更新するサービスを呼び出そうとしています。問題は、$httpを使用したサービスコールと私のブラウザのunloadイベントに応じたasync soそのコールをキャンセルしてブラウザを閉じることです。私はそのサービスコールに対して応答/エラーが出るまでブラウザーを待機させたい。サーバコールが完了するまでブラウザを待つことができますか?

私はe.preventDefault()e.stopPropagation()を呼び出してみましたが、機能しませんでした。

function releaseDocument(e) { 
    EventService.releaseDocument().then(function() { 
     window.close(); 
    }, function() { 
     window.close(); 
    }); 
} 

$window.onbeforeunload = releaseDocument; 
$window.onunload = releaseDocument; 

誰でも同じ目的を達成するための代替案を提案することはできますか?

+2

タブが手遅れに思考の私の方法でだ閉じるまで、あなたは待っていれば。ブラウザのクラッシュまたは停電...イベントがトリガされない、またはユーザーがその時点で接続していないとみなします。失敗したリクエストをキャッチするチャンスがある場所で先に送信することをお勧めします – charlietfl

+0

これは実行できません。 –

+0

@charlietfl私はあなたに同意します。そのような状況のためのその罰金。今のところ、ブラウザを手動で閉じる必要があります。 –

答えて

0

私たちは同期AJAXコールを使用することができますが、それは私の提案だけです。


ブラウザ/タブを閉じると、私たちは、確認ボックスが表示されます。同時に、私たちはあなたのサービスにと同時にご連絡いたします。しかし、確認ボックス行を実行する前にこのサービスを呼び出す必要があります。したがって、同期呼び出しはすべての行を実行し、結果を返します。確認だけが発生するか、またはタブを閉じます。ここでは関数を実行する時間がほとんどありません。


window.addEventListener("beforeunload", function (e) { 
    var confirmationMessage = "Do you want close this browser";  
    releaseDocument()// it should be an sync function (like you can set async:false in your ajax options 

    (e || window.event).returnValue = confirmationMessage; //Gecko + IE 
    return confirmationMessage;       //Webkit, Safari, Chrome 
}); 
+0

'beforeunload'の中でブロッキングコードを実行することはできません – charlietfl

+0

だから、私はそれが私の提案だと言ったのです。私はそれをテストしなかった。 :( –

関連する問題