首頁  >  文章  >  web前端  >  如何區分瀏覽器刷新和視窗關閉?

如何區分瀏覽器刷新和視窗關閉?

Patricia Arquette
Patricia Arquette原創
2024-11-04 04:54:02707瀏覽

How to Distinguish Between a Browser Refresh and a Window Close?

區分刷新和關閉瀏覽器操作

確定刷新頁面和關閉瀏覽器之間的區別似乎具有挑戰性,因為這兩個操作都會觸發ONUNLOAD 事件。不過,這個難題有一個解決方案。

解決方案:

此方法利用HTML5 本地儲存和伺服器客戶端通訊:

  1. ONUNLOAD Handleler> : 在頁面上,新增on-unload使用偽JavaScript向視窗發送處理程序:

    <code class="javascript">function myUnload(event) {
        if (window.localStorage) {
            window.localStorage['myUnloadEventFlag'] = new Date().getTime();
        }
        askServerToDisconnectUserInAFewSeconds(); // Synchronous AJAX call
    }</code>

    此函數:

    • 將頁面標記為正在本地儲存中卸載。
    • 非同步通知伺服器幾次後斷開使用者的連線
  2. 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) {
                // Browser reload
                askServerToCancelDisconnectionRequest(); // Asynchronous AJAX call
            } else {
                // Tab/window close
                // Perform desired actions (e.g., do nothing)
            }
        }
    }</code>

    此函數:

    • 檢查自上次卸載以來的時間差事件。
    • 如果過去的時間少於 10 秒,則為瀏覽器重新載入。
    • 如果過去的時間超過 10 秒,則為選項卡/視窗關閉。
  3. 伺服器互動:在伺服器上,維護斷開連接請求清單並使用計時器執行緒檢查清單。在逾時(例如 5 秒)後處理斷開連線請求,並在收到時處理取消請求。

此解決方案適用於區分選項卡/視窗關閉、重新載入操作、關注的連結和提交的表單。它適用於支援 HTML5 本機儲存的瀏覽器。但請注意,它依賴於卸載事件,並且可能與 MSIE7 等舊版瀏覽器不相容。

以上是如何區分瀏覽器刷新和視窗關閉?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn