ASP.net MVCでこれを行う方法がありますが、すべてのシナリオを考慮する必要があります。
あなたが言ったように、onbeforeunload
はナビゲートするために走行します。あなたがナビゲートしていないと思う方法を見つけることができれば、彼はもうそこにいません、あなたはあなたの目標を達成することができます。
SignalR
+ onbeforeunload
を使用することをお勧めします。これは、どのような方法でも、SignalRのタブを閉じるかどうかに関係なく、ユーザーは切断され、そのためにOnDisconnected
イベントが発生するからです。
これで、ユーザーはページを離れたことがわかりましたが、彼がナビゲートしているかタブを閉じているかわかりません。この場合、onbeforeunload
イベントが発生した場合は、onbeforeunload
を使用してサーバーにメッセージを送信します。今、2つのソリューションを一緒に考えて、あなたは金です。
だから何が起こる:タブまたはウィンドウを閉じるには を:onbeforeunload
が呼び出されますがconnectionId
= Xがナビゲートしており、短い時間後にサーバ内connectionId
が渡された場合と言うことで、サーバーにメッセージを送信されますOnDisconnected
あなたは彼がタブを閉じたと確信しています。もちろん
これら二つの動作が異なるスレッドで起こると、彼らはトップ余りですが、あなたのウェブサイトでこのような認識を持つことに深刻であれば、私は解決策に100%自信を持っていないよ、これは私のアプローチになりますすばらしい解決策になることができますが、それは数少ないものの一つかもしれません!
もちろん、SignalR
を使用したくない場合はSignalR
の代わりにの代わりにWebsocket
を使用する方法もありますが、これはSignalR
が行う古いブラウザでは動作しません。
アンロードイベントはページの開始方法ではなく、ページの[* 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
私は言うべき方法はないと思います... – evolutionxbox