Rumah > hujung hadapan web > tutorial js > Mengapa `window.close()` dan `self.close()` Tidak Akan Menutup Tetingkap Chrome Saya?

Mengapa `window.close()` dan `self.close()` Tidak Akan Menutup Tetingkap Chrome Saya?

Barbara Streisand
Lepaskan: 2024-12-14 19:01:14
asal
154 orang telah melayarinya

Why Won't `window.close()` and `self.close()` Close My Chrome Window?

"tetingkap.tutup dan diri.tutup Jangan Tutup Tetingkap dalam Chrome: Penjelasan dan Penyelesaian Komprehensif"

Bertentangan dengan kepercayaan popular, JavaScript sememangnya mampu menutup tetingkap yang dibuat oleh skrip, walaupun dalam Chrome. Langkah keselamatan ini, yang diperkenalkan untuk menghalang aktiviti berniat jahat, menyekat JavaScript daripada menutup tetingkap yang tidak dibuat oleh skrip yang sama.

Punca Masalah

Mengikut spesifikasi window.close(), a penyemak imbas boleh memilih untuk menutup tetingkap jika syarat berikut dipenuhi:

  1. Konteks penyemakan imbas mestilah "boleh ditutup skrip", bermakna ia dicipta oleh skrip atau hanya mempunyai satu dokumen dalam sejarah sesinya.
  2. Konteks penyemakan imbas skrip penyandang mesti biasa dengan konteks penyemakan imbas sasaran.
  3. Konteks penyemakan imbas penyandang skrip mesti dibenarkan untuk menavigasi konteks penyemakan imbas sasaran.

Firefox Sekatan

Firefox dengan tegas menguatkuasakan syarat bahawa JavaScript hanya boleh menutup tetingkap yang dibuka oleh skrip yang sama. Sebarang percubaan untuk menutup tetingkap yang tidak memenuhi kriteria ini akan menghasilkan mesej ralat, "Skrip mungkin tidak menutup tetingkap yang tidak dibuka oleh skrip."

Pengecualian Chrome

Chrome membenarkan pengecualian kepada peraturan ini, membenarkan JavaScript menutup tetingkap walaupun ia tidak dicipta oleh skrip yang sama. Walau bagaimanapun, pengecualian ini tidak digunakan pada skrip pengguna.

Penyelesaian

Chrome

  1. Eksploitasi Ubah Semula Diri (Ditamatkan): Gantikan halaman semasa dengan halaman itu sendiri dan kemudian tutup tetingkap: buka(lokasi, '_diri').dekat();. Eksploitasi ini kini kebanyakannya disekat.
  2. TamperMonkey Override (Fungsi Terhad): Menggunakan // @grant directive dan calling window.close() yang eksplisit boleh menutup tab tambahan dalam Chrome versi 43 dan di atas.

Firefox

  1. Tweak Tetapan Keselamatan (Tidak Disyorkan): Lumpuhkan perlindungan keselamatan dengan menetapkan allow_scripts_to_close_windows kepada benar dalam about:config. Ambil perhatian bahawa ini menimbulkan risiko keselamatan.

Penyelesaian Jangka Panjang

Untuk penutupan tetingkap yang boleh dipercayai, pertimbangkan untuk membangunkan sambungan Chrome atau alat tambah Firefox. Sambungan ini boleh menutup tetingkap semasa tanpa had JavaScript.

Atas ialah kandungan terperinci Mengapa `window.close()` dan `self.close()` Tidak Akan Menutup Tetingkap Chrome Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan