Bagaimana cara menutup tab saat ini di jendela browser?

436

Saya ingin membuat tautan di laman web yang akan menutup tab yang saat ini aktif di peramban tanpa menutup tab lain di peramban.
Ketika pengguna mengklik tautan tutup, sebuah pesan peringatan akan muncul meminta pengguna untuk mengonfirmasi dengan dua tombol, "YA" dan "TIDAK". Jika pengguna mengklik "YA", tutup halaman itu dan Jika "TIDAK", jangan lakukan apa pun.

Bagaimana itu bisa dilakukan? Ada saran?

Naveed
sumber
Saya mungkin terlambat ke sini, tetapi ini dicegah oleh browser karena suatu alasan. <br> <br> Pikirkan diri Anda mencoba menutup jendela lagi dan lagi dan itu tidak menutup karena melakukan bagian " jika tidak " dari pertanyaan Anda yang is 'do nothing'. Situs <br> Ini pasti akan menyebalkan!
Muhammad Osama

Jawaban:

503

Anda perlu Javascript untuk melakukan ini. Gunakan window.close():

close();

Catatan: tab saat ini tersirat. Ini sama dengan:

window.close();

atau Anda dapat menentukan jendela yang berbeda.

Begitu:

function close_window() {
  if (confirm("Close Window?")) {
    close();
  }
}

dengan HTML:

<a href="javascript:close_window();">close</a>

atau:

<a href="#" onclick="close_window();return false;">close</a>

Anda di return falsesini untuk mencegah perilaku default untuk acara tersebut. Kalau tidak, browser akan berusaha membuka URL itu (yang jelas bukan).

Sekarang opsi pada window.confirm()kotak dialog akan OK dan Batalkan (tidak Ya dan Tidak). Jika Anda benar - benar ingin Ya dan Tidak, Anda harus membuat beberapa jenis kotak dialog modal Javascript.

Catatan: ada perbedaan khusus browser dengan yang di atas. Jika Anda membuka jendela dengan Javascript (via window.open()) maka Anda diizinkan untuk menutup jendela dengan javascript. Firefox melarang Anda menutup jendela lain. Saya percaya IE akan meminta konfirmasi kepada pengguna. Peramban lain mungkin berbeda.

cletus
sumber
387
Anda tidak dapat menutup tab apa pun melalui JavaScript. "Metode ini hanya boleh dipanggil untuk windows yang dibuka oleh skrip menggunakan metode window.open." Dengan kata lain, Anda hanya dapat menggunakan JavaScript untuk menutup jendela / tab yang muncul melalui JavaScript.
Ryan Joy
7
-1 Tidak berfungsi pada PC chrome 30, jawaban lain menunjukkan untuk membuka jendela di tab saat ini dan kemudian menutupnya berfungsi
markasoftware
2
Di about:config dom.allow_scripts_to_close_windows = truemungkin solusi di Firefox (mungkin risiko keamanan besar!)
Nepomuk Frädrich
6
Browser tidak mengizinkan perilaku ini. Javascript hanya dapat menutup tab yang dibuka.
Edward Kennedy
1
Ini berfungsi (setidaknya) di Chrome 62: <button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> Lihat juga artikel ini
hering
247

Coba ini

<a href="javascript:window.open('','_self').close();">close</a>
Daniel Shen
sumber
2
Bekerja di Firefox 31.0
Adrian Carr
1
Sisi buruk dari solusi ini adalah bahwa permintaan dapatkan dikirim ke server. Tetapi di sisi lain, saya belum menemukan solusi lain.
100r
18
Melakukan ini dari konsol Chrome menghasilkan "Script dapat menutup hanya jendela yang dibuka olehnya"
parlemen
Tidak bekerja Skrip hanya dapat menutup jendela yang dibuka olehnya.
Roman Losev
1
Tidak berfungsi di chrome 60.0.3079.0: "Skrip hanya dapat menutup jendela yang dibuka olehnya."
Our_Benefactors
65

Metode ini berfungsi di Chrome dan IE:

<a href="blablabla" onclick="setTimeout(function(){var ww = window.open(window.location, '_self'); ww.close(); }, 1000);">
    If you click on this the window will be closed after 1000ms
</a>
Palesz
sumber
56
Simpler:open(location, '_self').close();
pada
Ini bekerja dengan baik di IE 11, tetapi tidak berhasil di Chrome 38
Yann Duran
31

Sejauh yang saya tahu, tidak mungkin lagi di Chrome atau FireFox. Mungkin masih dimungkinkan di IE (setidaknya pra-Edge).

Guy Schalnat
sumber
2
Ini berfungsi (setidaknya) di Chrome 62: <button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> Lihat juga artikel ini
hering
@ Yah, artikelnya dari 2006, tetapi jika Anda menemukan sesuatu yang berhasil, itu berita bagus dan mungkin akan membantu orang yang membaca sejauh ini. Terima kasih telah berbagi.
Guy Schalnat
Pertanyaannya adalah tentang menutup tab aktif saat ini dari dalam tab itu. Seperti yang Anda katakan, itu tidak mungkin di Chrome atau Firefox. Ini harus menjadi jawaban yang diterima.
Decates
14

Itu mungkin. Saya mencari seluruh jaring untuk ini, tetapi sekali ketika saya mengambil salah satu survei microsoft, saya akhirnya mendapatkan jawabannya.

coba ini:

window.top.close();

ini akan menutup tab saat ini untuk Anda.


sumber
12
"Skrip hanya dapat menutup jendela yang dibuka olehnya." di Chrome 50.
Husky
7

Diuji berhasil dalam FF 18 dan Chrome 24:

Masukkan di kepala:

<script>
    function closeWindow() {
        window.open('','_parent','');
        window.close();
    }
</script> 

HTML:

<a href="javascript:closeWindow();">Close Window</a>

Kredit diberikan kepada Marcos J. Drake .

Julesfrog
sumber
Bukan owrking di chrome "Script mungkin hanya menutup jendela yang dibuka olehnya."
César León
7

Coba ini juga. Bekerja untuk saya di ketiga browser utama.

<!-- saved from url=(0014)about:internet -->
<a href="#" onclick="javascript:window.close();opener.window.focus();" >Close Window</a>
Bhavin Shah
sumber
tidak bekerja di Firefox Quantum 68.0.1
Zeke
7

Berikut ini berfungsi untuk saya di Chrome 41:

function leave() {
  var myWindow = window.open("", "_self");
  myWindow.document.write("");
  setTimeout (function() {myWindow.close();},1000);
}

Saya sudah mencoba beberapa ide untuk FF termasuk membuka halaman web yang sebenarnya, tetapi sepertinya tidak ada yang berhasil. Sejauh yang saya mengerti, browser apa pun akan menutup tab atau jendela dengan xxx.close () jika itu benar - benar dibuka oleh JS, tetapi FF, setidaknya, tidak dapat ditipu untuk menutup tab dengan membuka konten baru di dalam tab itu.

Itu masuk akal ketika Anda memikirkannya - pengguna mungkin tidak ingin JS menutup tab atau jendela yang memiliki riwayat berguna.

Orang Thailand
sumber
Chrome: 'Uncaught TypeError: Tidak dapat menetapkan properti' innerHTML 'of null'
Francisco Corrales Morales
5

Maaf untuk necroposting ini, tetapi saya baru-baru ini mengimplementasikan situs yang dihosting secara lokal yang membutuhkan kemampuan untuk menutup tab browser saat ini dan menemukan beberapa solusi menarik yang tidak terdokumentasi dengan baik di mana pun saya bisa temukan, jadi coba lakukan sendiri.

Catatan: Pemecahan masalah ini dilakukan dengan mempertimbangkan situs yang dihosting secara lokal, dan (dengan pengecualian Edge) mengharuskan browser dikonfigurasikan secara khusus, jadi tidak ideal untuk situs yang dihosting secara publik.

Konteks: Di masa lalu, skrip jQuery window.close()dapat menutup tab saat ini tanpa masalah di sebagian besar browser. Namun, browser modern tidak lagi mendukung skrip ini, berpotensi karena alasan keamanan.

Google Chrome:

Chrome tidak mengizinkan skrip window.close () dijalankan dan tidak ada yang terjadi jika Anda mencoba menggunakannya. Namun, dengan menggunakan plugin Chrome TamperMonkey kita dapat menggunakan metode window.close () jika Anda memasukkan // @grant window.closedalam header UserScript dari TamperMonkey.

Sebagai contoh, skrip saya (yang dipicu ketika tombol dengan id = 'close_page' diklik dan jika 'ya' ditekan pada sembulan browser) terlihat seperti:

// ==UserScript==
// @name         Close Tab Script
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Closes current tab when triggered
// @author       Mackey Johnstone
// @match        http://localhost/index.php
// @grant        window.close
// @require      http://code.jquery.com/jquery-3.4.1.min.js
// ==/UserScript==

(function() {
    'use strict';
    $("#close_page").click(function() {
        var confirm_result = confirm("Are you sure you want to quit?");
        if (confirm_result == true) {
            window.close();
        }
    });
})();

Catatan: Solusi ini hanya dapat menutup tab jika BUKAN tab terakhir terbuka. Jadi secara efektif, itu tidak dapat menutup tab jika itu akan menyebabkan jendela ditutup dengan menjadi tab terakhir yang terbuka.

Firefox:

Firefox memiliki pengaturan lanjutan yang dapat Anda aktifkan untuk memungkinkan skrip untuk menutup windows, mengaktifkan window.close()metode ini secara efektif . Untuk mengaktifkan pengaturan ini, buka about: config kemudian cari dan temukan preferensi dom.allow_scripts_to_close_windows dan alihkan dari false ke true.

Ini memungkinkan Anda untuk menggunakan window.close()metode ini secara langsung di file jQuery Anda seperti halnya script lainnya.

Misalnya, skrip ini berfungsi sempurna dengan preferensi disetel ke true:

<script>
  $("#close_page").click(function() {
    var confirm_result = confirm("Are you sure you want to quit?");
    if (confirm_result == true) {
      window.close();
    }
  });
</script>

Ini berfungsi jauh lebih baik daripada solusi Chrome karena memungkinkan pengguna untuk menutup tab saat ini meskipun itu adalah satu-satunya tab yang terbuka, dan tidak memerlukan plugin pihak ketiga. Namun satu-satunya downside adalah bahwa ini juga memungkinkan skrip ini dijalankan oleh situs web yang berbeda (bukan hanya yang Anda ingin gunakan) sehingga berpotensi menjadi bahaya keamanan, meskipun saya tidak bisa membayangkan menutup tab saat ini menjadi sangat berbahaya.

Tepi:

Disappointingly Edge benar-benar melakukan yang terbaik dari semua 3 browser yang saya coba, dan bekerja dengan window.close()metode ini tanpa memerlukan konfigurasi apa pun. Ketika window.close()skrip dijalankan, popup tambahan memberi tahu Anda bahwa halaman tersebut mencoba untuk menutup tab saat ini dan menanyakan apakah Anda ingin melanjutkan.

masukkan deskripsi gambar di sini

Catatan Akhir: Solusi untuk Chrome dan Firefox adalah solusi untuk sesuatu yang sengaja dinonaktifkan oleh browser, berpotensi untuk alasan keamanan. Mereka juga meminta pengguna untuk mengkonfigurasi browser mereka agar kompatibel terlebih dahulu, sehingga kemungkinan tidak akan layak untuk situs yang ditujukan untuk penggunaan publik, tetapi ideal untuk solusi yang di-host secara lokal seperti milik saya.

Semoga ini bisa membantu! :)

Mackey Johnstone
sumber
5

Sedangkan untuk orang-orang yang masih mengunjungi halaman ini, Anda hanya diperbolehkan untuk menutup tab yang dibuka oleh skrip ATAU dengan menggunakan tag jangkar HTML dengan target _blank. Keduanya dapat ditutup menggunakan

<script>
    window.close();
</script>
killstreet
sumber
Ini berfungsi di setiap browser modern. IE11 dan Edge 17 menunjukkan peringatan konfirmasi tetapi masih berfungsi.
Fabian von Ellerts
1
<button class="closeButton" style="cursor: pointer" onclick="window.close();">Close Window</button>

ini berhasil bagi saya

pikax
sumber
1

sedikit terlambat tapi ini yang saya temukan ...

window.close()hanya akan berfungsi (IE adalah pengecualian) jika jendela yang Anda coba close()dibuka oleh skrip menggunakan metode window.open ().

! (silakan lihat komentar @killstreet di bawah ini tentang tag jangkar dengan target _blank)

TLDR : chrome & firefox memungkinkan untuk menutupnya.

Anda akan mendapatkan kesalahan konsol: Skrip tidak dapat menutup windows yang tidak dibuka oleh skrip. sebagai kesalahan dan tidak ada yang lain.

Anda dapat menambahkan parameter unik di URL untuk mengetahui apakah halaman dibuka dari skrip (seperti waktu) - tetapi itu hanya peretasan dan bukan fungsi asli dan akan gagal dalam beberapa kasus.

saya tidak dapat menemukan cara untuk mengetahui apakah halaman dibuka dari open () atau tidak, dan tutup tidak akan melempar dan kesalahan. ini TIDAK akan mencetak "test":

try{
  window.close();
}
catch (e){
  console.log("text");
}

Anda dapat membaca di MDN lebih lanjut tentang fungsi close ()

kalios
sumber
2
Bukan hanya tab yang telah dibuka oleh skrip, juga tag jangkar dengan target _blank akan diizinkan untuk ditutup. Sejauh ini diuji dalam chrome dan firefox dan keduanya tampaknya memungkinkan untuk menutup tab yang telah dibuka oleh tag anchor.
killstreet
-1

Inilah cara Anda membuat tautan seperti itu:

<a href="javascript:if(confirm('Close window?'))window.close()">close</a>

Eric Mickelsen
sumber
-1

Ini adalah salah satu cara pemecahan yang sama, mendeklarasikan fungsi JavaScript seperti ini

<script>
  function Exit() {
     var x=confirm('Are You sure want to exit:');
     if(x) window.close();
   }
</script>

Tambahkan baris berikut ke HTML untuk memanggil fungsi menggunakan a <button>

<button name='closeIt' onClick="Exit()" >Click to exit </Button>
Mohsin Chaudhari
sumber