Banyak halaman memiliki peringatan ketika Anda meninggalkannya: jika Anda menutup tab, bernavigasi tanpa menyimpan, dll, ada banyak alasan mengapa situs akan memperingatkan / memblokir Anda agar tidak pergi sampai Anda mengkonfirmasi peringatan, misalnya "Anda yakin ingin bernavigasi dari halaman ini? "
Ini biasanya dilakukan dengan onbeforeunload
dan / atau onunload
penangan.
Berikut ini sebuah contoh.
Apakah ada cara saya bisa mencegah peringatan / peristiwa pemblokiran pengguna yang dihasilkan oleh penangan itu? Pada dasarnya, saya ingin membiarkan JS diaktifkan, dan secara khusus melarang hal-hal yang akan mencegah saya meninggalkan halaman tanpa terjadi klik tambahan.
onbeforeunload
dan onunload
pawang harus tetap menembak; mereka seharusnya tidak diizinkan melakukan hal-hal yang memblokir pengguna. Itu berarti tidak ada peringatan, dan tidak ada operasi yang memakan waktu lebih dari beberapa detik.
Saya telah menemukan beberapa plugin yang mengedit / greasemonkey menambal javascript untuk halaman tertentu, dan bermain dengan kode mereka sedikit untuk mencoba dan membuatnya lebih berlaku secara universal. Namun, saya berharap menemukan solusi yang berfungsi pada halaman mana saja yang mencoba untuk memblokir keluar pengguna.
sumber
onbeforeunload
) hanya akan berfungsi untuk halaman yang menggunakanonbeforeunload
, bukan untuk halaman yang menggunakan salah satu metode lain untuk melampirkan acara.Jawaban:
Nah, hal paling sederhana untuk dilakukan adalah menimpa skrip halaman secara langsung, dan menugaskan kembali acara tersebut
null
.Ini harus bekerja di mana saja, kecuali jika mereka benar-benar jahat, dan terus menugaskannya sendiri. Dalam kasus seperti itu, loop untuk menjaga pengaturan
null
mungkin akan berfungsi.Sekarang, berhati-hatilah, beberapa halaman menggunakannya untuk kebaikan. Ambil halaman unggah YouTube: Jika Anda menavigasi selama unggahan, Anda mungkin telah kehilangan banyak kemajuan! Atau mungkin formulir web yang Anda isi, yang mungkin tidak ingin Anda isi lagi, atau pesan (forum / email) yang mungkin tidak ingin Anda ketik ulang. Dengan fitur ini, Anda terlindungi.
Masalah lain adalah setiap halaman yang menggunakan ini untuk tujuan sekunder, seperti menyimpan data oleh AJAX. Mereka dapat menggunakan acara ini untuk memicu tindakan simpan, dan berharap bahwa pengguna membutuhkan waktu cukup lama untuk mengklik tombol agar permintaan dapat dilalui. Sekali lagi, ini sering dilakukan untuk menyelamatkan Anda dari diri sendiri.
Tapi, jelas, kita semua tahu banyak halaman menggunakan ini untuk sakit. Jadi, jika Anda tahu halaman mana saja yang Anda inginkan berfungsi, Anda selalu bisa memiliki sistem daftar putih. Sebenarnya tidak ada cara untuk memblokir tindakan ini, tanpa benar-benar memblokir
window.onbeforeunload
, dan tindakan (mungkin bagus) yang mungkin diambil.Tidak ada cara (tanpa pengetahuan sebelumnya tentang kode halaman yang diberikan) untuk menjaga tindakan yang baik saat menghentikan kotak popup. Kotak ini bukan sebuah
alert()
. Kotak dihasilkan oleh browser, sebagai perilaku yang dimaksudkan olehonbeforeunload
. Seseorang menciptakannya dengan membuat fungsi apa pun yang mereka tetapkan untukwindow.onbeforeunload
mengembalikan string. String itu akan dicetak di popup.Dengan demikian, Anda tidak akan dapat memblokir popup tanpa menghapus fungsinya.
Plus, jika Anda menemukan cara, AJAX apa pun akan gagal. Munculan memberi permintaan waktu untuk melewati, tanpa itu, data dapat hilang.
Adapun
onunload
, seharusnya tidak mungkin untuk memblokir Anda dengan ini. Karena menyala setelah halaman dibongkar. Tapi agar aman, Anda selalu bisa melakukanwindow.onunload = null;
dan itu harus diurus.sumber
onbeforeunload
pawang melakukan sesuatu yang penting? Misalnya, bagaimana jika membuat permintaan AJAX singkat, atau melakukan sesuatu untuk penyimpanan HTML5 lokal? Apakah ada cara untuk mencegahonbeforeunload
penangan melakukan panggilan tertentu (yaitualert()
), atau berjalan lebih lama dari periode waktu tertentu? Itu sebabnya saya bertanya tentang ekstensi daripada hanya skrip jenis-greasemonkey: sepertinya, untuk melakukan ini dengan benar, harus ada sesuatu yang berubah di tingkat mesin JavaScript.sumber
Ada alat bagus yang dapat menangani sembulan sembarang gangguan pada sistem Windows - ClickOff . Anda dapat mengunduhnya dari sini . Saya memeriksanya dan berfungsi dengan tanda "Perubahan yang Anda buat mungkin tidak disimpan" untuk situs SharePoint.
sumber