"Bu pencereyi kapatmak istiyor musunuz" istemini almadan bir tarayıcı penceresini nasıl kapatabilirim?


86

Bu pencereyi kapatmak istiyor musunuz? İstemini almadan bir tarayıcı penceresini nasıl kapatabilirim ?

Bu window.close();işlevi kullandığımda komut istemi ortaya çıkıyor .


22
en kolay:window.open('','_self').close()
markasoftware

Firefox'ta, kullanıcı pencerenin kapatılmasını devre dışı bırakırsa, bunların hepsi tartışılabilir. kb.mozillazine.org/…
Brian


Yanıtlar:


85
window.open('', '_self', ''); window.close();

Bu benim için çalışıyor.


IE11, Safary 5.1.7 için çalışır, ancak FF ve Chrome'da çalışmaz.
nikolai.serdiuk

Firefox 38.0.5 ve Chrome 43 Çalışma
justanotherprogrammer

ya pencere kullanılarak açılırsa showModalDialog? IE10 üzerinde çalışmıyor
bjan

Bunun tüm tarayıcılarda çalışıp çalışmadığından emin değilim, ancak IE11'de çalışıyor !!! Şu anda için oluşturmamız gereken tarayıcı hangisi. Bu cevap için teşekkürler, beni çok fazla zahmetten kurtardın.
KidBilly

IE 11, Chrome 76.0.3809, Firefox 69.0
Rahul Mahadik

57

Arkadaşım ... bir yol var ama "hack" onu tarif etmeye başlamıyor. Temelde IE 6 ve 7'deki bir hatadan yararlanmalısınız.

Her seferinde işe yarar!

Aramak yerine window.close()başka bir sayfaya yönlendirin.

Açılış Sayfası:

alert("No whammies!");
window.open("closer.htm", '_self');

Başka bir sayfaya yönlendirin. Bu, IE'yi bu sayfadaki tarayıcıyı kapatmanıza izin vermesi için kandırır.

Kapanış Sayfası:

<script type="text/javascript">
    window.close();
</script>

Harika ha ?!


1
Zaten 2 yıl olduğunu biliyorum. Ama bu harika ... IE 8 ve firefox 15'te çalışıyor
Susie

9
Görünüşe göre Microsoft bu hatayı IE10'da düzeltti. Bunu IE10'da nasıl başarabileceğimizi bilen var mı?
Abhi Rampal

Hem self.close () hem de window.close () benim tarafımda IE için çalışmıyor. Ancak, Chrome, FF ve Safari iyi durumda
NoName

57

Komut dosyalarının, bir kullanıcının açtığı bir pencereyi kapatmasına izin verilmez . Bu bir güvenlik riski olarak kabul edilir. Herhangi bir standartta olmamasına rağmen, tüm tarayıcı satıcıları bunu takip eder ( Mozilla belgeleri ). Bu bazı tarayıcılarda meydana gelirse, bu (ideal olarak) çok hızlı bir şekilde yamalanan bir güvenlik hatasıdır.

Bu soruya verilen cevaplardaki hack'lerden hiçbiri artık işe yaramıyor ve eğer birisi başka bir kirli hack ile gelirse, sonunda çalışmayı da durduracaktır.

Bununla mücadele etmek için enerji harcamamanızı ve tarayıcının size bu kadar yardımcı bir şekilde sunduğu yöntemi benimsemenizi öneririm - görünüşte sayfasını kırmadan önce kullanıcıya sorun .


5
Veya daha da basit: Pencereyi hiç kapatmayın. İşlemi tamamladıysanız, kullanıcıyı ana sayfanıza veya başka bir tür merkezi konuma geri gönderin.
duskwuff -inaktif-

2
@duskwuff, Bu tarayıcılara karşı otomatik testler yürütüyoruz. Onlar gerek kapatın .
ouflak

2
@ouflak Elbette test çerçevenizin pencereleri işlemek için bir yolu vardır.
duskwuff -inaktif-

1
@duskwuff Pencereleri ortalıkta bırakan üçüncü taraf kitaplıkları ne olacak? Kesinlikle bu karmaşayı kullanıcıya bırakmamı veya onları ana sayfanın (kopya) bir görünümüne yönlendirmemi öneremezsiniz.
Terkedilmiş Sepet

1
Cevabınızda ayrıca bir dipnot olarak neden güvenlik riski olduğunu da açıklar mısınız?
T.Todua

31

Tarayıcıyı İstem veya Uyarı olmadan kapatmak için kullandığım Javascript işlevi burada, Flash'tan da çağrılabilir. Html dosyasında olmalıdır.

    function closeWindows() {
         var browserName = navigator.appName;
         var browserVer = parseInt(navigator.appVersion);
         //alert(browserName + " : "+browserVer);

         //document.getElementById("flashContent").innerHTML = "<br>&nbsp;<font face='Arial' color='blue' size='2'><b> You have been logged out of the Game. Please Close Your Browser Window.</b></font>";

         if(browserName == "Microsoft Internet Explorer"){
             var ie7 = (document.all && !window.opera && window.XMLHttpRequest) ? true : false;  
             if (ie7)
             {  
               //This method is required to close a window without any prompt for IE7 & greater versions.
               window.open('','_parent','');
               window.close();
             }
            else
             {
               //This method is required to close a window without any prompt for IE6
               this.focus();
               self.opener = this;
               self.close();
             }
        }else{  
            //For NON-IE Browsers except Firefox which doesnt support Auto Close
            try{
                this.focus();
                self.opener = this;
                self.close();
            }
            catch(e){

            }

            try{
                window.open('','_self','');
                window.close();
            }
            catch(e){

            }
        }
    }

IE 10.0.9200'de showModalDialog,. Açık closeWindows, Bir önceki hala açıkken yeni bir pencere (aynı sayfa) açar.
bjan

Firefox'ta çalışmadı, IE / Edge bir onay istemi görüntüledi - yine de Chrome'da çalıştı.
Dymas

12

(Chrome 26, Internet Explorer 9 ve Safari 5.1.7 Bu eserler olmadan Nick'in cevap ala bir yardımcı sayfasının kullanımı):

<script type="text/javascript">
    window.open('javascript:window.open("", "_self", "");window.close();', '_self');
</script>

Yuvalanmış window.open, IE'nin Bu pencereyi kapatmak istiyor musunuz istemini görüntülememesini sağlamaktır.

Ne yazık ki Firefox'un pencereyi kapatması imkansız.


IE 10 için de çalıştı.
Mukus

11

Gövde etiketinde:

<body onload="window.open('', '_self', '');">

Pencereyi kapatmak için:

<a href="javascript:window.close();">

Safari 4.0.5, FF for Mac 3.6, IE 8.0 ve FF for Windows 3.5 üzerinde test edilmiştir


Bu, işlevsel olarak Nick'in yaptığı şeyle aynı.
naugtur

Evet. Nick'in gönderisini doğru okursam, window.close'u aramadan önce bir yönlendirme önerir. Bir yönlendirme kullanmak istemiyorsan gönderdim. Nick'in gönderdiği özürleri yanlış yorumluyorsam.
JimB

7

Güvenlik nedenleriyle, bir pencere yalnızca JavaScript ile açılmışsa JavaScript'te kapatılabilir. Pencereyi kapatmak için _self, hedef olarak mevcut pencerenizin üzerine yazacak yeni bir pencere açmanız ve ardından onu kapatmanız gerekir (bunu JavaScript aracılığıyla açıldığından beri yapabilirsiniz).

window.open('', '_self', '');
window.close();

bu Silverlight ile benim için çalıştı: HtmlPage.Window.Eval ("window.open ('', '_self', ''); window.close ();");
Mike Fuchs

6

Gönderen burada :

<a href="javascript:window.opener='x';window.close();">Close</a>

Bir window.openerşeye ayarlaman gerekiyor , yoksa şikayet ediyor.


Benim için çalışıyor, yaklaşık 7 yıl sonra Chrome, FF ve IE 10'da.
Mike Devenney

6

window.open('', '_self', '').close();

Burada biraz geç özür dilerim ama çözümü en azından benim durumum için buldum. Safari 11.0.3 ve Google Chrome 64.0.3282.167'de test edildi


5

IE'deki güvenlik geliştirmeleri nedeniyle, bir komut dosyası tarafından açılmadıkça bir pencereyi kapatamazsınız. Dolayısıyla, bunun etrafından dolaşmanın yolu, tarayıcının bu sayfanın bir komut dosyası kullanılarak açıldığını düşünmesine izin vermek ve ardından pencereyi kapatmak olacaktır. Uygulama aşağıdadır.

Bunu dene, bir cazibe gibi çalışıyor!
javascript mevcut pencereyi IE istemi olmadan kapat

<script type="text/javascript">
function closeWP() {
 var Browser = navigator.appName;
 var indexB = Browser.indexOf('Explorer');

 if (indexB > 0) {
    var indexV = navigator.userAgent.indexOf('MSIE') + 5;
    var Version = navigator.userAgent.substring(indexV, indexV + 1);

    if (Version >= 7) {
        window.open('', '_self', '');
        window.close();
    }
    else if (Version == 6) {
        window.opener = null;
        window.close();
    }
    else {
        window.opener = '';
        window.close();
    }

 }
else {
    window.close();
 }
}
</script>

javascript mevcut pencereyi IE istemi olmadan kapat


2

JavaScript işlevi oluşturun

<script type="text/javascript">
    function closeme() {
        window.open('', '_self', '');
        window.close();
    }
</script>

Şimdi bu kodu yazın ve yukarıdaki JavaScript işlevini çağırın

<a href="Help.aspx" target="_blank" onclick="closeme();">Help</a>

Ya da sadece:

<a href="" onclick="closeme();">close</a>

2

Bu çalışacak :

<script type="text/javascript">
function closeWindowNoPrompt()
{
window.open('', '_parent', '');
window.close();
}
</script>

Python Eel'in Chrome uygulamasını kullanarak çalıştı.
revliscano


0

Tarayıcı şikayet ediyor çünkü JavaScript ile açılmamış bir pencereyi kapatmak için JavaScript kullanıyorsunuz, yani window.open('foo.html');.


0

Bulduğum en iyi çözüm:

this.focus();
self.opener=this;
self.close();

0

Aşağıdaki kodu ASPX'e yerleştirin.

<script language=javascript>
function CloseWindow() 
{
    window.open('', '_self', '');
    window.close();
}
</script>

Aşağıdaki kodu düğme tıklama olayının arkasındaki koda yerleştirin.

string myclosescript = "<script language='javascript' type='text/javascript'>CloseWindow();</script>";

Page.ClientScript.RegisterStartupScript(GetType(), "myclosescript", myclosescript);

Kapatmadan önce herhangi bir işleminiz yoksa, aşağıdaki kodu doğrudan ASPX'in kendisine düğme tıklama etiketine koyabilirsiniz.

OnClientClick="CloseWindow();"

Bu yardımcı olur umarım.


Sorular basit bir javascript çözümü ister, ASPX'ten kaçının.
Zeeshan

@Zeeshan: Tuzuna değer herhangi bir geliştirici, Kamleshkumar Gujarathi'nin gönderisinin en üstündeki JavaScript'in kendi gereksinimlerine uygulanabileceğini görebilir. Cevabını reddettiyseniz, sert bir dokunuş.
Paul,

0

Benim durumumda aşağıdaki kod bir php dosyasına gömüldü.

var PreventExitPop = true;
function ExitPop() {
  if (PreventExitPop != false) {
    return "Hold your horses! \n\nTake the time to reserve your place.Registrations might become paid or closed completely to newcomers!"
  }
}
window.onbeforeunload = ExitPop;

Bu yüzden konsolu açtım ve şunu yazdım

PreventExitPop = false

Bu sorunu çözdü. Bu yüzden, JavaScript kodunu bulun ve değişken (ler) i bulun ve bunları benim durumumda "yanlış" olan uygun bir "değere" atayın


-3

Bunu göndereceğim çünkü şu anda sitem için kullandığım şey bu ve hem Google Chrome'da hem de IE 10'da herhangi bir açılır pencere mesajı almadan çalışıyor:

<html>
    <head>
    </head>
    <body onload="window.close();">
    </body>
</html>

Sitemde bir açma / kapama değişkenini oturuma doğrudan yeni bir sayfaya gitmeden kaydetmek için çalıştırmak istediğim bir işlev var, bu yüzden sadece küçük bir açılır pencere web sayfası açıyorum. Bu web sayfası daha sonra onload="window.close();"işlevle kendini hemen kapatır .


Evet: ancak stackoverflow.com/a/24854246/2239406 bilgilerinde olduğu gibi : windo'yu javascript'te açarsınız, ardından javascript ile kapatabilirsiniz.
Denis Chenu

peki, çalışmaması gerekiyorsa ve bu 'yamalanmış' ise, bilgisayarımdaki tüm tarayıcılarda hatasız çalışır. Şu anda benim için çalışan bir çözüm sunuyordum.
Logan Hasbrouck

Fark şudur: pencereyi JS'de açarsınız. Pencere JS'de açılmıyorsa: çalışmıyor.
Denis Chenu

Hayır, pencereyi açmak için JS kullanmıyorum; bunun yerine , belirli bir url'de küçük bir açılır pencere açmak için bir aile kullanıyorum target=_blank, sonra nihayet pencereyi kapatmak için JS kullanıyorum. Bunun amacı, belirli url'nin arka plan resimlerini devre dışı bırakmak için oturuma bir değer kaydetmesidir, ancak burada yakında ajax'ın nasıl yapıldığını anladığımda ajax lehine sileceğim. (hala ipleri öğreniyor)
Logan Hasbrouck
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.