ホームページ >ウェブフロントエンド >jsチュートリアル >onUnload イベントでページの更新とブラウザの終了を区別するにはどうすればよいですか?

onUnload イベントでページの更新とブラウザの終了を区別するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-04 03:51:29453ブラウズ

How to Distinguish Between Page Refresh and Browser Close in the onUnload Event?

ページの更新とブラウザを閉じるアクションの区別

ページの更新またはブラウザの終了によってトリガーされた場合、ONUNLOAD イベントは 2 つのアクションを区別する際に課題が生じます。

この問題に対処するために、次のソリューションでは HTML5 ローカル ストレージとクライアント/サーバー AJAX 通信を利用します。

ソリューションの実装

ページ onLoad イベント ハンドラー

<code class="javascript">function myLoad(event) {
    if (window.localStorage) {
        var t0 = Number(window.localStorage['myUnloadEventFlag']);
        if (isNaN(t0)) t0=0;
        var t1=new Date().getTime();
        var duration=t1-t0;
        if (duration<10*1000) {
            // It's a browser reload
        } else {
            // It's a browser close
        }
    }
}</code>

ページ onUnload イベント ハンドラー

<code class="javascript">function myUnload(event) {
    if (window.localStorage) {
        // Flag the page as unloading
        window.localStorage['myUnloadEventFlag']=new Date().getTime();
    }

    // Notify the server to disconnect the user in a few seconds
    askServerToDisconnectUserInAFewSeconds();
}</code>

サーバー実装

  • 切断リクエストをリストに収集します。
  • リストを定期的に検査するタイマー スレッドを設定し、タイムアウト (5 秒) 後にユーザーを切断します。
  • クライアントからキャンセル要求を受信したら、リストから切断要求を削除します。

重要なポイント

  • beforeUnload の代わりにアンロード イベントを使用すると、添付ファイルを適切に処理できます。
  • このソリューションは、HTML5 ローカル ストレージをサポートするブラウザーに限定されます。
  • event.clientY または X 位置に基づく代替アプローチは次のとおりです。信頼性が低くなります。

以上がonUnload イベントでページの更新とブラウザの終了を区別するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。