Rumah >hujung hadapan web >tutorial js >Bagaimana Membezakan Antara Penyegaran Penyemak Imbas dan Penutupan Tetingkap?

Bagaimana Membezakan Antara Penyegaran Penyemak Imbas dan Penutupan Tetingkap?

Patricia Arquette
Patricia Arquetteasal
2024-11-04 04:54:02768semak imbas

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

Membezakan Antara Muat semula dan Tutup Tindakan Penyemak Imbas

Menentukan perbezaan antara menyegarkan halaman dan menutup penyemak imbas mungkin kelihatan mencabar, kerana kedua-dua tindakan mencetuskan acara ONUNLOAD. Walau bagaimanapun, terdapat penyelesaian untuk teka-teki ini.

Penyelesaian:

Pendekatan ini memanfaatkan storan tempatan HTML5 dan komunikasi pelayan-pelayan:

  1. Pengendali ONUNLOAD: Pada halaman, tambahkan pengendali semasa punggah pada tetingkap menggunakan pseudo-JavaScript:

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

    Fungsi ini:

    • Membenderakan halaman sebagai memunggah dalam storan setempat.
    • Secara tak segerak memberitahu pelayan untuk memutuskan sambungan pengguna dalam beberapa saat.
  2. ONLOAD Handler: Pada badan, tambahkan on-load handler:

    <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>

    Fungsi ini:

    • Menyemak perbezaan masa sejak acara pemunggahan sebelumnya.
    • Jika kurang daripada 10 saat telah berlalu, ia adalah muat semula penyemak imbas.
    • Jika lebih daripada 10 saat telah berlalu, ia adalah penutupan tab/tetingkap.
  3. Pelayan Interaksi: Pada pelayan, kekalkan senarai permintaan pemutusan sambungan dan gunakan benang pemasa untuk memeriksa senarai. Proses permintaan pemutusan sambungan selepas tamat masa (cth., 5 saat) dan kendalikan pembatalan jika diterima.

Penyelesaian ini berfungsi untuk membezakan antara penutupan tab/tetingkap, muat semula tindakan, pautan yang diikuti dan borang yang diserahkan. Ia boleh digunakan dalam penyemak imbas dengan sokongan storan tempatan HTML5. Walau bagaimanapun, ambil perhatian bahawa ia bergantung pada acara pemunggahan dan mungkin tidak serasi dengan pelayar lama seperti MSIE7.

Atas ialah kandungan terperinci Bagaimana Membezakan Antara Penyegaran Penyemak Imbas dan Penutupan Tetingkap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn