2016-04-13 29 views
1

現在、JavaScriptのwindow.onbeforeunload関数を使用してブラウザの終了タブを検出しています。私はユーザーが閉じるタブをクリックしたときに関数を実行したいだけです。ただし、この機能は、ユーザーがあるページから別のページに移動するときにも実行されます(アクション結果からアクション結果)。私はasp.net mvcにコードを書いています。4.前もってありがとうございます。ブラウザの終了タブの検出

window.onbeforeunload = function() { 

}; 
+1

アンロードイベントはページの開始方法ではなく、ページの[* unloading *](https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onunload)に基づいているためです。おそらく、非標準の[* close *イベント](https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XUL/Events/close_event)があなたの求めるものです。 – RobG

+1

私は言うべき方法はないと思います... – evolutionxbox

答えて

0

ASP.net MVCでこれを行う方法がありますが、すべてのシナリオを考慮する必要があります。

あなたが言ったように、onbeforeunloadはナビゲートするために走行します。あなたがナビゲートしていないと思う方法を見つけることができれば、彼はもうそこにいません、あなたはあなたの目標を達成することができます。

SignalR + onbeforeunloadを使用することをお勧めします。これは、どのような方法でも、SignalRのタブを閉じるかどうかに関係なく、ユーザーは切断され、そのためにOnDisconnectedイベントが発生するからです。

これで、ユーザーはページを離れたことがわかりましたが、彼がナビゲートしているかタブを閉じているかわかりません。この場合、onbeforeunloadイベントが発生した場合は、onbeforeunloadを使用してサーバーにメッセージを送信します。今、2つのソリューションを一緒に考えて、あなたは金です。

だから何が起こる:タブまたはウィンドウを閉じるには を:onbeforeunloadが呼び出されますがconnectionId = Xがナビゲートしており、短い時間後にサーバ内connectionIdが渡された場合と言うことで、サーバーにメッセージを送信されますOnDisconnectedあなたは彼がタブを閉じたと確信しています。もちろん

これら二つの動作が異なるスレッドで起こると、彼らはトップ余りですが、あなたのウェブサイトでこのような認識を持つことに深刻であれば、私は解決策に100%自信を持っていないよ、これは私のアプローチになりますすばらしい解決策になることができますが、それは数少ないものの一つかもしれません!

もちろん、SignalRを使用したくない場合はSignalRの代わりにの代わりにWebsocketを使用する方法もありますが、これはSignalRが行う古いブラウザでは動作しません。

関連する問題