Setelah pengguna membuka halaman saya, saya tidak ingin dia menyegarkan halaman.
Kapan saja, pengguna mengklik F5 menekan atau menyegarkan tombol di atas. Dia harus mendapatkan pepatah waspada
Anda tidak dapat menyegarkan halaman.
Juga jika pengguna membuka tab baru dan mencoba mengakses url yang sama di tab sebelumnya, dia harus mendapat peringatan
Anda tidak dapat membuka halaman yang sama di 2 tab
Pokoknya saya bisa melakukan ini menggunakan JavaScript atau jQuery? Poin satu sangat penting.
javascript
jquery
refresh
pankaj
sumber
sumber
Jawaban:
# 1 dapat diimplementasikan melalui
window.onbeforeunload
.Sebagai contoh:
<script type="text/javascript"> window.onbeforeunload = function() { return "Dude, are you sure you want to leave? Think of the kittens!"; } </script>
Pengguna akan diminta dengan pesan tersebut, dan diberi opsi untuk tetap di halaman atau melanjutkan perjalanan mereka. Ini menjadi lebih umum. Stack Overflow melakukan ini jika Anda mencoba keluar dari halaman saat Anda mengetik kiriman. Anda tidak dapat sepenuhnya menghentikan pengguna untuk memuat ulang, tetapi Anda dapat membuatnya terdengar sangat menakutkan jika mereka melakukannya.
# 2 kurang lebih tidak mungkin. Meskipun Anda melacak sesi dan login pengguna, Anda tetap tidak dapat menjamin bahwa Anda mendeteksi tab kedua dengan benar. Misalnya, mungkin saya membuka satu jendela, lalu menutupnya. Sekarang saya membuka jendela baru. Anda mungkin akan mendeteksinya sebagai tab kedua, meskipun saya sudah menutup yang pertama. Sekarang pengguna Anda tidak dapat mengakses jendela pertama karena mereka menutupnya, dan mereka tidak dapat mengakses jendela kedua karena Anda menolaknya.
Faktanya, sistem online bank saya berusaha keras untuk melakukan # 2, dan situasi yang dijelaskan di atas terjadi sepanjang waktu. Saya biasanya harus menunggu hingga sesi sisi server berakhir sebelum saya dapat menggunakan sistem perbankan lagi.
sumber
Anda tidak dapat mencegah pengguna menyegarkan, Anda juga tidak harus benar-benar mencoba. Anda harus kembali ke mengapa Anda membutuhkan solusi ini, apa akar masalahnya di sini ?. Mulailah dari sana dan temukan cara lain untuk menyelesaikan masalah. Mungkin Anda telah menjelaskan mengapa Anda merasa perlu melakukan ini, ini akan membantu dalam menemukan solusi seperti itu.
Mendobrak fitur peramban fundamental bukanlah ide yang bagus, lebih dari 99.999999999% internet berfungsi dan menyegarkan dengan F5, ini adalah harapan pengguna, yang tidak boleh Anda rusak.
sumber
Meskipun bukan ide yang baik untuk menonaktifkan kunci F5, Anda dapat melakukannya di JQuery seperti di bawah ini.
<script type="text/javascript"> function disableF5(e) { if ((e.which || e.keyCode) == 116 || (e.which || e.keyCode) == 82) e.preventDefault(); }; $(document).ready(function(){ $(document).on("keydown", disableF5); }); </script>
Semoga ini bisa membantu!
sumber
Kembali ke masa awal CGI, kami memiliki banyak bentuk yang akan memicu berbagai tindakan backend. Seperti pemberitahuan teks ke grup, pekerjaan cetak, pengumpulan data, dll.
Jika pengguna berada di halaman yang mengatakan "Harap tunggu ... Melakukan beberapa pekerjaan BESAR yang bisa memakan waktu.". Mereka lebih mungkin untuk melakukan REFRESH dan ini akan menjadi BURUK!
MENGAPA? Karena itu akan memicu pekerjaan yang lebih lambat dan pada akhirnya menghambat semuanya.
Solusinya? Biarkan mereka melakukan bentuk mereka. Ketika mereka mengirimkan formulir mereka ... Mulailah pekerjaan Anda dan kemudian arahkan mereka ke halaman lain yang memberitahu mereka untuk menunggu.
Dimana halaman di tengah sebenarnya menyimpan formulir data yang dibutuhkan untuk memulai pekerjaan. Namun halaman WAIT berisi riwayat javascript yang dihancurkan. Jadi mereka dapat MEMBUANGKAN halaman tunggu itu semau mereka dan itu tidak akan memicu pekerjaan asli untuk dimulai di latar belakang karena halaman WAIT itu hanya berisi data formulir yang diperlukan untuk WAIT itu sendiri.
Harapan itu masuk akal.
Fungsi penghancuran riwayat juga mencegah mereka mengklik KEMBALI dan kemudian menyegarkan juga.
Itu sangat mulus dan bekerja dengan baik selama BANYAK tahun sampai organisasi nirlaba ditutup.
Contoh: FORMULIR MASUK - Kumpulkan semua info mereka dan ketika dikirim, ini memicu pekerjaan backend Anda.
RESPONS dari entri formulir - Mengembalikan HTML yang melakukan pengalihan ke halaman tunggu statis Anda dan / atau POST / GET ke formulir lain (halaman WAIT).
HALAMAN TUNGGU - Hanya berisi FORM data yang terkait dengan halaman tunggu serta javascript untuk menghancurkan history terbaru. Suka (-1 ATAU -2) untuk hanya menghancurkan halaman terbaru, tetapi tetap memungkinkan mereka untuk kembali ke halaman entri FORM aslinya.
Setelah mereka berada di halaman TUNGGU Anda, mereka dapat mengklik REFRESH sebanyak yang mereka inginkan dan itu tidak akan pernah memunculkan pekerjaan FORM asli di backend. Sebagai gantinya, halaman WAIT Anda harus merangkul META waktunya refresh itu sendiri sehingga selalu dapat memeriksa status pekerjaan mereka. Ketika pekerjaan mereka selesai, mereka dialihkan dari halaman tunggu ke mana pun Anda inginkan.
Jika mereka melakukan REFRESH secara manual ... Mereka hanya menambahkan satu cek lagi dari status pekerjaan mereka di sana.
Semoga membantu. Semoga berhasil.
sumber
Tidak, tidak ada.
Saya cukup yakin tidak ada cara untuk mencegat klik pada tombol segarkan dari JS, dan bahkan jika ada, JS dapat dimatikan.
Anda mungkin harus mundur dari X Anda (mencegah penyegaran) dan menemukan solusi yang berbeda untuk Y (apa pun itu).
sumber
Angka (2) dimungkinkan dengan menggunakan implementasi soket (seperti websocket, socket.io, dll.) Dengan detak jantung khusus untuk setiap sesi yang melibatkan pengguna. Jika pengguna mencoba membuka jendela lain, Anda memiliki pemeriksaan penangan javascript dengan server jika tidak apa-apa, lalu tanggapi dengan pesan kesalahan.
Namun, solusi yang lebih baik adalah menyinkronkan kedua sesi jika memungkinkan seperti di Google Docs.
sumber
Masalah # 2 sekarang dapat diselesaikan menggunakan BroadcastAPI .
Saat ini hanya tersedia di Chrome, Firefox, dan Opera.
var bc = new BroadcastChannel('test_channel'); bc.onmessage = function (ev) { if(ev.data && ev.data.url===window.location.href){ alert('You cannot open the same page in 2 tabs'); } } bc.postMessage(window.location.href);
sumber