Apa cara terbaik untuk mendeteksi jika pengguna meninggalkan halaman web?
Acara onunload
JavaScript tidak berfungsi setiap waktu (permintaan HTTP membutuhkan waktu lebih lama dari waktu yang diperlukan untuk menghentikan browser).
Membuat satu mungkin akan diblokir oleh browser saat ini.
javascript
ANaimi
sumber
sumber
Jaringan Pengembang Mozilla memiliki deskripsi dan contoh yang bagus tentang onbeforeunload .
Jika Anda ingin memperingatkan pengguna sebelum meninggalkan halaman jika halaman Anda kotor (yaitu jika pengguna telah memasukkan beberapa data):
sumber
Inilah solusi alternatif - karena di sebagian besar browser kontrol navigasi (bilah navigasi, tab, dll.) Terletak di atas area konten halaman, Anda dapat mendeteksi penunjuk mouse yang meninggalkan halaman melalui bagian atas dan menampilkan " sebelum Anda pergi " dialog. Ini benar-benar tidak mengganggu dan memungkinkan Anda untuk berinteraksi dengan pengguna sebelum mereka benar-benar melakukan tindakan untuk pergi.
Kelemahannya adalah tentu saja dugaan bahwa pengguna benar-benar berniat untuk pergi, tetapi dalam sebagian besar kasus itu benar.
sumber
Untuk ini saya menggunakan:
Itu dipecat tepat sebelum halaman diturunkan.
sumber
onbeforeunload
,?Saya tahu pertanyaan ini telah dijawab, tetapi jika Anda hanya ingin sesuatu untuk dipicu ketika BROWSER yang sebenarnya ditutup, dan bukan hanya ketika terjadi pageload, Anda dapat menggunakan kode ini:
Dalam contoh saya, saya mengosongkan penyimpanan lokal dan memberi tahu pengguna dengan mouse y coords, hanya ketika browser ditutup, ini akan diabaikan pada semua pemuatan halaman dari dalam program.
sumber
e
variabel dalam kasus ini) harus digunakan: stackoverflow.com/questions/9813445/ …This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user.
developer.mozilla.org/en-US/docs/Web/API/Window/eventSalah satu (sedikit hacky) cara untuk melakukannya adalah mengganti dan tautan yang mengarah keluar dari situs Anda dengan panggilan AJAX ke sisi server, menunjukkan pengguna pergi, kemudian menggunakan blok javascript yang sama untuk membawa pengguna ke situs eksternal yang mereka sudah diminta.
Tentu saja ini tidak akan berhasil jika pengguna cukup menutup jendela browser atau mengetikkan URL baru.
Untuk menyiasatinya, Anda mungkin perlu menggunakan setTimeout () Javascript pada halaman, membuat panggilan AJAX setiap beberapa detik (tergantung seberapa cepat Anda ingin tahu apakah pengguna telah pergi).
sumber
Berkat Pekerja Servis , dimungkinkan untuk mengimplementasikan solusi yang mirip dengan Adam murni di sisi klien, asalkan browser mendukungnya. Hanya menghindari permintaan detak jantung:
sumber
setInterval(() => fetch('/heartbeat'), 5000)
?Jika Anda perlu melakukan beberapa kode asinkron (seperti mengirim pesan ke server bahwa pengguna tidak fokus pada halaman Anda saat ini), acara
beforeunload
tidak akan memberikan waktu untuk menjalankan kode async. Dalam kasus async saya menemukan bahwavisibilitychange
danmouseleave
peristiwa adalah opsi terbaik. Peristiwa ini memanas saat pengguna mengubah tab, atau menyembunyikan browser, atau mengeluarkan courser dari lingkup jendela.sumber
Untuk apa nilainya, ini adalah apa yang saya lakukan dan mungkin dapat membantu orang lain walaupun artikel itu sudah tua.
PHP:
JS
Panggilan Ajax ke activeUser.php
Basis data:
Pada dasarnya setiap 5 detik js akan memposting ke file php yang akan melacak pengguna dan alamat ip pengguna. Pengguna aktif hanyalah catatan basis data yang memiliki pembaruan ke cap waktu basis data dalam waktu 5 detik. Pengguna lama berhenti memperbarui ke database. Alamat ip digunakan hanya untuk memastikan bahwa pengguna unik sehingga 2 orang di situs pada saat yang sama tidak mendaftar sebagai 1 pengguna.
Mungkin bukan solusi yang paling efisien tetapi itu berhasil.
sumber