Benar. Chrome tidak pernah (dengan sengaja) mengizinkan jendela yang tidak dibuka oleh skrip untuk ditutup oleh skrip
Jika Anda memiliki pengalaman berbeda dengan Chrome, itu adalah bug, meskipun saya ragu itu pernah berhasil
Saya melihat "Skrip hanya dapat menutup jendela yang dibuka olehnya". Dan menyarankan bahwa pesan yang Anda kutip sebenarnya adalah pesan Firefox, jadi pastikan Anda memposting ke browser yang benar
Umumnya, Anda tidak dapat menutup jendela yang dibuka oleh pengguna. Jendela memanggil. open("", "_self") tidak membuka jendela baru, itu menggunakan kembali jendela yang ada dan dengan demikian, tidak seharusnya membuatnya dapat ditutup secara tiba-tiba, saya yakin
Jika Anda dapat menutup jendela yang tidak Anda buka secara terprogram, maka itu adalah bug dan pasti sudah diperbaiki
chrome. tabs adalah API ekstensi, tidak tersedia untuk halaman web (Anda dapat membuat ekstensi yang akan menutup jendela untuk Anda)
Contoh
Gunakan open() untuk membuka jendela dan close() untuk menutup jendela
biarkan jendelaku;
fungsi openWin() {
myWindow = jendela. buka("", "Jendelasaya", "lebar=200, tinggi=100");
}
fungsi closeWin() {
myWindow. menutup();
}
Lebih banyak contoh di bawah ini
Definisi dan Penggunaan
Metode close() menutup jendela
Sintaksis
Parameter
Nilai Pengembalian
Lebih Banyak Contoh
Contoh
Buka "www. w3schools. com" di jendela baru, dan gunakan close() untuk menutupnya
fungsi openWin() {
myWindow = jendela. buka("https. // www. w3schools. com", "_kosong", "lebar=200, tinggi=100");
}
fungsi closeWin() {
myWindow. menutup();
}
Dukungan Peramban
close() didukung di semua browser
ChromeEdgeFirefoxSafariOperaIEYaYaYaYaYaJavaScript tidak mengizinkan seseorang untuk menutup jendela yang dibuka oleh pengguna, menggunakan jendela tersebut. metode close() karena masalah keamanan. Namun, kita dapat menutup jendela dengan menggunakan solusi. Pendekatan yang harus diikuti adalah dengan membuka URL saat ini menggunakan JavaScript sehingga bisa ditutup dengan skrip
Mendekati. Langkah-langkah di bawah ini menunjukkan pendekatan ini
- Membuka jendela baru menggunakan metode open(). Pertama, kita perlu membuka jendela baru menggunakan jendela. buka() metode. URL saat ini dapat diakses menggunakan properti location dari objek window. Atribut target atau nilai nama jendela diberikan sebagai _self. Ini penting karena membuat URL menggantikan halaman saat ini
- Tutup jendela yang terbuka ini menggunakan metode close(). Jendela. metode close() menutup jendela tempat ia dipanggil. Jendela yang dibuka pada langkah pertama ditutup dengan menggunakan metode ini. Ini berfungsi karena jendela sekarang telah dibuka oleh skrip kami, bukan oleh pengguna
Catatan. Pendekatan ini mungkin tidak berfungsi di semua browser karena penerapan keamanan browser yang berbeda
Metode ini hanya dapat dipanggil di windows yang dibuka dengan skrip menggunakan metode Window.open(). Jika jendela tidak dibuka oleh skrip, kesalahan yang mirip dengan ini akan muncul di konsol. Scripts may not close windows that were not opened by script._
Perhatikan juga bahwa close() tidak berpengaruh saat dipanggil pada objek Window yang dikembalikan oleh HTMLIFrameElement.contentWindow
close()
Tidak ada
Tidak ada (undefined)
Contoh ini menunjukkan metode yang membuka jendela dan yang kedua menutup jendela;
Jika jawabannya adalah solusi yang tepat, silakan klik "Terima Jawaban" dan mohon upvote. Jika Anda memiliki pertanyaan tambahan tentang jawaban ini, silakan klik "Komentar"
Catatan. Silakan ikuti langkah-langkah dalam dokumentasi kami untuk mengaktifkan pemberitahuan email jika Anda ingin menerima pemberitahuan email terkait untuk utas ini
Javascript biasa tidak bisa menutup windows mau tidak mau. Ini adalah fitur keamanan, yang diperkenalkan beberapa waktu lalu, untuk menghentikan berbagai eksploitasi dan gangguan berbahaya
Dari
Metode close() pada objek Window harus, jika semua kondisi berikut terpenuhi, menutup konteks penelusuran A
- Konteks penjelajahan yang sesuai A dapat ditutup skrip
- Konteks penjelajahan skrip incumbent akrab dengan konteks penjelajahan A
- Konteks penelusuran skrip incumbent diizinkan untuk menavigasi konteks penelusuran A
Konteks penjelajahan dapat ditutup skrip jika itu adalah konteks penjelajahan tambahan yang dibuat oleh skrip (berlawanan dengan tindakan pengguna), atau jika itu adalah konteks penjelajahan yang riwayat sesinya hanya berisi satu Dokumen
Artinya, dengan satu pengecualian kecil, javascript tidak boleh menutup jendela yang tidak dibuka oleh javascript yang sama
Chrome mengizinkan pengecualian itu - yang tidak berlaku untuk skrip pengguna - namun Firefox tidak.
Metode ini hanya boleh dipanggil untuk windows yang dibuka oleh skrip menggunakan metode window.open
Jika Anda mencoba menggunakan window.close_ dari Greasemonkey / Tampermonkey / userscript Anda akan mendapatkan
Firefox. Pesan kesalahan, "Scripts may not close windows that were not opened by script."
Chrome. hanya diam-diam gagal
Cara terbaik untuk mengatasinya adalah dengan membuat ekstensi Chrome dan/atau add-on Firefox sebagai gantinya. Ini dengan andal dapat menutup jendela saat ini
Namun, karena risiko keamanan, yang ditimbulkan oleh window.close, jauh lebih sedikit untuk skrip Greasemonkey/Tampermonkey;
Pertimbangkan untuk membuat permintaan fitur
Chrome saat ini rentan terhadap eksploitasi "self redirection". Jadi kode seperti ini dulu berfungsi secara umum
open(location, '_self').close(); _Ini adalah perilaku buggy, IMO, dan sekarang (kira-kira April 2015) sebagian besar diblokir. Itu masih akan berfungsi dari kode yang disuntikkan hanya jika tab baru dibuka dan tidak memiliki halaman dalam riwayat penelusuran. Jadi itu hanya berguna dalam keadaan yang sangat kecil
Namun, variasi masih berfungsi di Chrome (v43 & v44) plus Tampermonkey (v3. 11 atau lebih baru). Gunakan @grant eksplisit dan window.close() polos. MISALNYA
// ==UserScript== // @name window.close demo // @include //YOUR_SERVER.COM/YOUR_PATH/* // @grant GM_addStyle // ==/UserScript== setTimeout (window.close, 5000);Terima kasih kepada zanetu untuk pembaruannya. Perhatikan bahwa ini tidak akan berfungsi jika hanya ada satu tab yang terbuka. Itu hanya menutup tab tambahan
Firefox aman terhadap eksploit itu. Jadi, satu-satunya cara javascript adalah melumpuhkan pengaturan keamanan, satu browser dalam satu waktu
Anda dapat membuka // ==UserScript==
// @name window.close demo
// @include //YOUR_SERVER.COM/YOUR_PATH/*
// @grant GM_addStyle
// ==/UserScript==
setTimeout (window.close, 5000);
_0 dan mengatur
// ==UserScript==
// @name window.close demo
// @include //YOUR_SERVER.COM/YOUR_PATH/*
// @grant GM_addStyle
// ==/UserScript==
setTimeout (window.close, 5000);
1 sampai // ==UserScript==
// @name window.close demo
// @include //YOUR_SERVER.COM/YOUR_PATH/*
// @grant GM_addStyle
// ==/UserScript==
setTimeout (window.close, 5000);
2
Jika skrip Anda untuk penggunaan pribadi, lanjutkan dan lakukan itu. Jika Anda meminta orang lain untuk mengaktifkan pengaturan itu, mereka akan cerdas, dan dibenarkan, untuk menolak dengan prasangka