Bir tarayıcı penceresinde geçerli sekme nasıl kapatılır?


435

Bir web sayfasında, tarayıcıdaki diğer sekmeleri kapatmadan bir tarayıcıda o anda etkin olan sekmeyi kapatacak bir bağlantı oluşturmak istiyorum.
Kullanıcı kapat bağlantısını tıklattığında, kullanıcıdan "EVET" ve "HAYIR" olmak üzere iki düğme ile onaylamasını isteyen bir uyarı mesajı görünmelidir. Kullanıcı "EVET" i tıklatırsa, bu sayfayı kapatın ve "HAYIR" ise hiçbir şey yapmayın.

Nasıl yapılabilir? Herhangi bir öneri?


Geç burada olabilir ama bu bir nedeni tarayıcılar tarafından engellenir. <br> tekrar tekrar bir pencereyi kapatmak için çalışıyor Kendini düşün ve onun yaptığını olarak kapanış değil " eğer hiçbir " Sorunuzun gelen kısmı "hiçbir şey yapma" dır. <br> <br> Bu kesinlikle rahatsız edici olacak!
Muhammad Osama

Yanıtlar:


503

Bunu yapmak için Javascript'e ihtiyacınız olacak. Kullanım window.close():

close();

Not: geçerli sekme ima edilir. Bu eşdeğerdir:

window.close();

veya farklı bir pencere belirtebilirsiniz.

Yani:

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

HTML ile:

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

veya:

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

Sen return falseolayı için varsayılan davranışı önlemek için Buraya. Aksi takdirde tarayıcı söz konusu URL'ye gitmeye çalışır (ki açıkça öyle değildir).

Şimdi window.confirm()iletişim kutusundaki seçenekler TAMAM ve İptal olacaktır (Evet ve Hayır değil). Eğer varsa gerçekten Evet ve Hayır istiyorum, kalıcı Javascript iletişim kutusunun çeşit oluşturmanız gerekir.

Not: Yukarıdakilerle tarayıcıya özgü farklılıklar vardır. Pencereyi Javascript (üzerinden window.open()) ile açtıysanız, pencereyi javascript ile kapatmanıza izin verilir. Firefox diğer pencereleri kapatmanıza izin vermez. IE kullanıcı onayı isteyecektir inanıyorum. Diğer tarayıcılar değişebilir.


387
JavaScript aracılığıyla hiçbir sekmeyi kapatamazsınız. "Bu yöntemin yalnızca bir script tarafından window.open yöntemi kullanılarak açılan pencereler için çağrılmasına izin verilir." Başka bir deyişle, JavaScript'i yalnızca JavaScript aracılığıyla oluşturulan bir pencereyi / sekmeyi kapatmak için kullanabilirsiniz.
Ryan Joy

7
-1 30 PC krom çalışmaz sekmesinde bir pencere açmak ve daha sonra kapatmak için gösterilen diğer cevaplar çalışmıyor
markasoftware

2
In about:config dom.allow_scripts_to_close_windows = trueFirefox'ta çözeltisi (büyük bir güvenlik riski olabilir!) Olabilir
Nepomuk Frädrich

6
Tarayıcı bu davranışa izin vermiyor. Javascript yalnızca açtığı bir sekmeyi kapatabilir.
Edward Kennedy

1
Bu, en azından Chrome 62'de çalışır: <button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> Ayrıca bu makaleye bakın
hering

247

Bunu dene

<a href="javascript:window.open('','_self').close();">close</a>

2
Firefox 31.0'da çalışma
Adrian Carr

1
Bu çözümün kötü tarafı, sunucuya bir alma isteği gönderilmesidir. Ama diğer tarafta, başka bir çözüm bulamadım.
100r

18
Bunu Chrome konsolundan yapmak "Komut dosyaları yalnızca açtığı pencereleri kapatabilir"
parlamento

Çalışmıyor. Komut dosyaları yalnızca açtığı pencereleri kapatabilir.
Roman Losev

1
60.0.3079.0 kromunda çalışmıyor: "Komut dosyaları yalnızca açtığı pencereleri kapatabilir."
Our_Benefactors

65

Bu yöntem Chrome ve IE'de çalışır:

<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>

56
Daha basit:open(location, '_self').close();
13'te

Bu IE 11'de iyi çalıştı, ancak Chrome 38'de çalışmadı
Yann Duran

31

Anlayabildiğim kadarıyla artık Chrome veya FireFox'ta mümkün değil. IE'de hala mümkün olabilir (en azından Edge öncesi).


2
Bu, en azından Chrome 62'de çalışır: <button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> Ayrıca bu makaleye bakın
hering

@hering Eh, makale 2006'dan, ancak işe yarayan bir şey bulursanız, bu harika bir haberdir ve belki de bu kadar okuyan insanlara yardımcı olacaktır. Paylaşım için teşekkürler.
Guy Schalnat

Soru, geçerli etkin sekmeyi o sekmenin içinden kapatmakla ilgiliydi. Dediğiniz gibi, Chrome veya Firefox'ta mümkün değil. Bu kabul edilen cevap olmalı.
decates

14

Bu mümkün. Bunun için tüm ağı araştırdım, ancak bir kez microsoft'un anketinden birini aldığımda nihayet cevabı aldım.

bunu dene:

window.top.close();

bu sizin için geçerli sekmeyi kapatır.


12
"Komut dosyaları yalnızca onun açtığı pencereleri kapatabilir." Chrome 50'de.
Husky

7

FF 18 ve Chrome 24'te başarıyla test edildi:

Kafasına yerleştirin:

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

HTML:

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

Krediler Marcos J. Drake'e gidiyor .


"Komut dosyaları yalnızca onun açtığı pencereleri kapatabilir."
César León

7

Bunu da deneyin. Benim için her üç tarayıcıda çalışıyorum.

<!-- saved from url=(0014)about:internet -->
<a href="#" onclick="javascript:window.close();opener.window.focus();" >Close Window</a>

Firefox Kuantum 68.0.1 çalışmıyor
Zeke

7

Chrome 41'de aşağıdakiler benim için çalışıyor:

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

FF için gerçek bir web sayfası açmak da dahil olmak üzere çeşitli fikirler denedim, ancak hiçbir şey işe yaramıyor. Anladığım kadarıyla, herhangi bir tarayıcı JS tarafından gerçekten açılmışsa bir sekmeyi veya pencereyi xxx.close () ile kapatacak , ancak en azından FF, o sekmenin içinde yeni içerik açarak bir sekmeyi kapatamaz .

Bunu düşündüğünüzde bu mantıklıdır - bir kullanıcı JS'nin kullanışlı geçmişi olan bir sekmeyi veya pencereyi kapatmasını istemeyebilir.


Chrome: 'Yakalanmadı TypeError: null' innerHTML 'özelliği ayarlanamıyor
Francisco Corrales Morales

5

Bunu necroposting için üzgünüm, ancak son zamanlarda mevcut tarayıcı sekmesini kapatma yeteneğine ihtiyaç duyan ve bulabildiğim her yerde iyi belgelendirilmemiş bazı ilginç geçici çözümler bulan yerel olarak barındırılan bir site uyguladım, bu yüzden bunu kendim aldım.

Not: Bu geçici çözümler yerel olarak barındırılan bir site düşünülerek yapılmıştır ve (Edge hariç) tarayıcının özel olarak yapılandırılmasını gerektirir, bu nedenle genel olarak barındırılan siteler için ideal olmaz.

Bağlam: Geçmişte, jQuery betiği window.close()geçerli sekmeyi çoğu tarayıcıda sorunsuz olarak kapatabiliyordu. Ancak, modern tarayıcılar artık güvenlik nedeniyle potansiyel olarak bu komut dosyasını desteklememektedir.

Google Chrome:

Chrome, window.close () komut dosyasının çalıştırılmasına izin vermez ve kullanmaya çalıştığınızda hiçbir şey olmaz. Biz ancak TamperMonkey eklentisi Chrome'u kullanarak yapabilirsiniz window.close () yöntemini kullanmak durumunda eklemek // @grant window.closeTamperMonkey arasında userscript başlığındaki.

Örneğin, komut dosyam (id = 'close_page' bulunan bir düğmeye tıklandığında ve tarayıcı açılır penceresinde 'evet' basıldığında tetiklenir) şöyle görünür:

// ==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();
        }
    });
})();

Not: Bu çözüm sekmeyi ancak açık olan son sekme DEĞİLSE kapatabilir. Bu nedenle, son sekme açık olarak pencerenin kapanmasına neden olacaksa sekmeyi kapatamaz.

Firefox:

Firefox, komut dosyalarının pencereleri kapatmasına izin verebileceğiniz ve window.close()yöntemi etkili bir şekilde etkinleştirebileceğiniz gelişmiş bir ayara sahiptir . Bu ayarı etkinleştirmek için about: config komutuna gidin ve dom.allow_scripts_to_close_windows tercihini arayın ve bulun ve false değerinden true değerine değiştirin.

Bu, window.close()yöntemi diğer komut dosyalarında olduğu gibi doğrudan jQuery dosyanızda kullanmanızı sağlar .

Örneğin, bu komut dosyası tercihi true değerine ayarlandığında mükemmel çalışır:

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

Bu, kullanıcının tek sekme açık olsa bile geçerli sekmeyi kapatmasına izin verdiği ve üçüncü taraf bir eklenti gerektirmediği için Chrome geçici çözümünden çok daha iyi çalışır. Tek dezavantajı, aynı zamanda bu komut dosyasının farklı web siteleri tarafından çalıştırılmasına izin vermesidir (sadece kullanmak istediğinizi değil), bu yüzden potansiyel olarak bir güvenlik tehlikesi olabilir, ancak mevcut sekmeyi kapatmanın özellikle tehlikeli olduğunu düşünemiyorum.

kenar:

Hayal kırıklığı yaratan Edge aslında denediğim 3 tarayıcıdan en iyisini yaptı ve window.close()herhangi bir yapılandırma gerektirmeden yöntemle çalıştı . Ne zaman window.close()komut dosyası çalıştırılır, ek bir pop-up uyarıları sayfa geçerli sekmeyi kapatmak için çalıştığını ve devam etmek isteyip istemediğinizi sorar.

resim açıklamasını buraya girin

Son Not: Hem Chrome hem de Firefox'un çözümleri, potansiyel olarak güvenlik nedeniyle tarayıcıların kasıtlı olarak devre dışı bırakıldığı bir şey için geçici çözümlerdir. Her ikisi de kullanıcının tarayıcılarını elden önce uyumlu olacak şekilde yapılandırmasını gerektirir, bu nedenle genel kullanıma yönelik siteler için uygun olmayabilir, ancak benimki gibi yerel olarak barındırılan çözümler için idealdir.

Umarım bu yardımcı oldu! :)


5

Bu sayfayı hâlâ ziyaret eden kişilere gelince, yalnızca komut dosyası tarafından açılan bir sekmeyi VEYA hedef _blank ile HTML'nin tutturma etiketini kullanarak kapatmanıza izin verilir. Her ikisi de

<script>
    window.close();
</script>

Bu, her modern tarayıcıda çalışır. IE11 ve Edge 17 bir onaylama uyarısı gösterir, ancak yine de çalışır.
Fabian von Ellerts

1
<button class="closeButton" style="cursor: pointer" onclick="window.close();">Close Window</button>

bu benim için işi yaptı


1

biraz geç ama bu ben öğrendim ...

window.close()yalnızca denediğiniz pencere close()window.open () yöntemi kullanılarak bir komut dosyası tarafından açılmışsa (IE bir istisnadır) çalışır .

! (lütfen hedef _blank'lı bağlantı etiketi hakkında @ killstreet'in yorumuna bakın)

TLDR : chrome & firefox bunları kapatmaya izin verir.

konsol hatası alırsınız: Komut dosyaları, komut dosyası tarafından açılmayan pencereleri kapatmayabilir. bir hata ve başka bir şey olarak.

sayfanın bir komut dosyasından açıldığını (zaman gibi) bilmek için URL'ye benzersiz bir parametre ekleyebilirsiniz - ancak bu sadece bir hack ve yerel bir işlevsellik değildir ve bazı durumlarda başarısız olur .

Ben bir open () açılmış veya değil sayfanın açık olup olmadığını bilmek için herhangi bir yol bulamadık ve yakın atmak ve hatalar olmaz. bu "test" yazmaz :

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

okuyabilir daha yakın () işlevi hakkında MDN'yi içinde


2
Yalnızca komut dosyaları tarafından açılan sekmeler değil, hedef _ boşluğuna sahip bir bağlantı etiketinin kapatılmasına da izin verilir. Şimdiye kadar krom ve firefox'ta test edildi ve her ikisi de bir bağlantı etiketi tarafından açılan sekmeleri kapatmaya izin veriyor gibi görünüyor.
killstreet

-1

Böyle bir bağlantıyı nasıl oluşturacağınız aşağıda açıklanmıştır:

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


-1

Bunu çözmenin bir yolu, böyle bir JavaScript işlevi bildirmek

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

Aşağıdaki satırı, <button>

<button name='closeIt' onClick="Exit()" >Click to exit </Button>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.