Window.close() Gagal dalam Chrome: Satu Langkah Keselamatan
Dalam bidang pembangunan web, telah diperhatikan bahawa tetingkap panggilan .close() atau self.close() dalam JavaScript telah berhenti menutup tetingkap yang disasarkan dalam penyemak imbas Chrome. Tingkah laku ini berpunca daripada langkah keselamatan penting yang dilaksanakan oleh Chrome untuk menghalang kod hasad dan pop timbul yang tidak diminta daripada menjejaskan pengalaman menyemak imbas pengguna.
Penutupan tetingkap dihadkan terutamanya kepada skrip yang telah menghasilkan tetingkap ini. Chrome mematuhi prinsip ini, tidak membenarkan penutupan sewenang-wenang oleh skrip luaran. Walau bagaimanapun, pengecualian ketara kepada peraturan ini hanya tersedia untuk JavaScript yang dijana oleh pengarang, membolehkan penutupan tetingkap yang dibuat oleh skrip yang sama.
Pelaksanaan Firefox yang Lebih Tegas
Firefox , sebaliknya, menguatkuasakan dasar yang lebih ketat, melarang penutupan tetingkap melainkan skrip pemanggilan secara eksplisit mencipta tetingkap menggunakan kaedah window.open(). Sebarang percubaan untuk memintas sekatan ini mengakibatkan mesej ralat dalam Firefox, manakala Chrome memilih kegagalan senyap.
Mitigasi untuk Pengguna Chrome
Untuk menangani cabaran ini dalam Chrome, eksploitasi "pengalihan kendiri" telah dieksploitasi sebelum ini. Walau bagaimanapun, teknik ini telah menjadi sebahagian besarnya tidak berkesan dalam versi semasa penyemak imbas. Namun begitu, versi strategi yang diubah suai kekal berdaya maju untuk digunakan dalam set keadaan yang terhad. Dengan menggunakan Tampermonkey dengan kebenaran @grant eksplisit, window.close() masih boleh dimanfaatkan untuk menutup tab tambahan (jika ada) dalam Chrome.
Untuk pengguna Firefox, satu-satunya penyelesaian yang berdaya maju melibatkan melumpuhkan keselamatan terbina dalam tetapan dalam penyemak imbas. Walau bagaimanapun, amalan ini amat tidak digalakkan kerana risiko keselamatan yang meningkat yang dikaitkan dengan konfigurasi penyemak imbas yang lemah.
Penyelesaian dan Penambahbaikan Jangka Panjang
Pendekatan paling berkesan untuk mengelakkan perkara ini had secara kekal adalah untuk membangunkan sambungan Chrome atau alat tambah Firefox. Mekanisme ini menyediakan keupayaan penutupan tingkap yang boleh dipercayai. Selain itu, mencadangkan fungsi sedemikian sebagai permintaan ciri kepada penyelenggara Greasemonkey dan Tampermonkey boleh menghasilkan penambahbaikan selanjutnya dan pelaksanaan yang dipermudahkan untuk pengarang skrip pengguna.
Atas ialah kandungan terperinci Mengapa `window.close()` Tidak Berfungsi dalam Chrome dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!