ブラウザの閉じるボタンがクリックされたことをどのように識別できますか?
8 に答える
JavaScript イベント リファレンスから、最も近い一致は OnUnload イベントのようです。ただし、これはページから離れた場所への移動もキャッチします (したがって、ユーザーが実際にリンクをクリックした場合に関数を実行する必要はありません)。
サーバーがブラウザ ウィンドウが閉じられたというメッセージを受信するという保証はありません。たとえば、小さなポップアップ ウィンドウを作成するという古い方法は、最新のブラウザのほとんどでブロックされます。AJAX を使用しても機能する場合がありますが、接続を試行する前にブラウザー ウィンドウが閉じる場合があります。
これは:
$(window).unload( function () { alert("Bye now!"); } );
助けます ?
ただし、jQueryにあります。
ただし、 Demoli によって提供されたリンクを確認する必要があります。この特定の方法 (およびその欠点) に関する詳細情報があります。
編集:リンクを追加しました。
ブラウザには閉じるイベントがないため、ユーザーがいつブラウザを閉じたかを実際に知ることはできません。このスレッドにはいくつかの潜在的な回避策があります
何を達成しようとしているのかをお知らせいただければ、別の方法があるかもしれません
onbeforeunload
ではなく、を使用する必要がありますonunload
。IE 7 (およびおそらく他のブラウザー) は、イベントの発生に関して 100% 信頼できるわけではありませんunload
が、常にbeforeunload
イベントを発生させるようです。
例えば:
window.onbeforeunload=function(){}
または、prototype.js を使用している場合:
Event.observe(window, 'beforeunload', function(){});
これはハックですが、私にはうまくいくようです。IE固有のものかもしれません。私はIEのみの環境向けにコーディングしています。
<body onunload="if(self.screenTop>9000){unloadFunction();}">
私のunloadFunctionがユーザーのセッションを強制終了するポップアップウィンドウを開くことを追加するために編集されました。閉じられたページ自体では何もできません。もう閉まってるから!;)
私は northsouthwhat に同意しますが、 onbeforeunload を使用したいすべてのブラウザーでサポートされていない可能性があることに注意してください。
サーバーを数秒ごとから数分ごとに定期的にポーリングする ajax 呼び出しをセットアップし (必要な時間の精度に応じて)、サーバー側の最終ヒット時間を追跡できます。完全に正確ではありませんが (たとえば、ネットワークの問題により誤検知が発生する可能性があります)、要件によってはオプションになる場合があります。
通常、ユーザーがページを離れる (アンロード?) ときに発生するイベントがあります。これはブラウザー固有の場合があります。
関連するウィンドウが閉じられた後にウィンドウ オブジェクトに設定されるプロパティ window.closed もあります。これは通常、ポップアップ ウィンドウへの参照がある場合に使用されます。
「closed」プロパティが設定される前または後に unload イベントが発生するかどうかはわかりません。実験する必要があります。
閉じたウィンドウと別のサイトに移動したブラウザを区別できない場合があります。