ユーザーが Web ブラウザのタブを閉じたかどうかを知る方法はありますか? 具体的には IE7 ですが、FireFox なども同様です。Web サイトを含む現在のタブが閉じた場合に、asp コードからこの状況を処理できるようにしたいと考えています。
7 に答える
onbeforeunload は、次のイベントでも呼び出されます -
* Close the current browser window.
* Navigate to another location by entering a new address or selecting a Favorite.
* Click the Back, Forward, Refresh, or Home button.
* Click an anchor that refers the browser to another Web page.
* Invoke the anchor.click method.
* Invoke the document.write method.
* Invoke the document.open method.
* Invoke the document.close method.
* Invoke the window.close method.
* Invoke the window.open method, providing the possible value _self for the window name.
* Invoke the window.navigate or NavigateAndFind method.
* Invoke the location.replace method.
* Invoke the location.reload method.
* Specify a new value for the location.href property.
* Submit a form to the address specified in the ACTION attribute via the INPUT type=submit control, or invoke the form.submit method.
そのため、ユーザーがタブまたはブラウザー ウィンドウを閉じたときにユーザーをログアウトしようとすると、リンクをクリックするかページを送信するたびにログアウトすることになります。
「 onbeforeunload」イベントを添付します。ブラウザ/タブが閉じる直前にコードを実行できます。
あなたなら、document.unloadはそれをしませんか?
Santoshは正しいです。このイベントは、タブ/ブラウザの閉じるボタンをクリックするだけでなく、さらに多くのアクションでトリガーされます。ドキュメントの準備ができたときに次の関数を追加することで、onbeforeunloadアクションがトリガーされないようにするための小さなハックを作成しました。
$(function () {
window.onbeforeunload = OnBeforeUnload;
$(window).data('beforeunload', window.onbeforeunload);
$('body').delegate('a', 'hover', function (event) {
if (event.type === 'mouseenter' || event.type === "mouseover")
window.onbeforeunload = null;
else
window.onbeforeunload = $(window).data('beforeunload');
});
});
また、Santoshによって言及されたイベントのいずれかをトリガーする前に、次の行を実行する必要があります。
window.onbeforeunload = null;
イベントをトリガーしたくない場合。
そして、これが最後のコードです。
function OnBeforeUnload(oEvent) {
// return a string to show the warning message (not every browser will use this string in the dialog)
// or run the code you need when the user closes your page
return "Are you sure you want to close this window?";
}
Eran Galperin が提案したように、 を使用しますonbeforeunload
。特に、文字列を返すと、その文字列が確認ダイアログに含まれ、ユーザーがページを離れるかどうかを選択できるようになります。各ブラウザーには、返される文字列の前後にテキストが含まれているため、さまざまなブラウザーでテストして、ユーザーに表示される内容を確認する必要があります。
OPはWebページ自体のコンテキストから尋ねていると確信していますが、この質問に出くわしたFirefoxアドオン開発者は、TabClose
イベントを使用できます. https://developer.mozilla.org/en/Code_snippets/Tabbed_browser#Notification_when_a_tab_is_added_or_removed
サーバー側でページがいつ閉じられたかを知る必要がある場合、最善の策は、ページから定期的にサーバーに ping を送信することです (XMLHttpRequest
たとえば、 を使用)。ping が停止すると、ページが閉じられます。これは、ブラウザーがクラッシュした場合、終了した場合、またはコンピューターの電源がオフになった場合にも機能します。