Jak mogę zamknąć okno przeglądarki bez pytania „Czy chcesz zamknąć to okno”?

86

Jak mogę zamknąć okno przeglądarki bez pytania Czy chcesz zamknąć to okno ?

Monit pojawia się, gdy używam window.close();funkcji.

Derek
źródło
22
najłatwiej:window.open('','_self').close()
markasoftware
W przeglądarce Firefox wszystko to może być dyskusyjne, jeśli użytkownik wyłączy zamykanie okna. kb.mozillazine.org/…
Brian,
3
Jeśli nie jesteś właścicielem okna, nie powinieneś.
Robert Harvey,
To już nie jest możliwe. stackoverflow.com/a/19768082/391101
zbiory316

Odpowiedzi:

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

To działa dla mnie.

Arabam
źródło
Działa dla IE11, Safary 5.1.7, ale nie działa w FF i Chrome.
nikolai.serdiuk
Praca w Firefoksie 38.0.5 i Chrome 43
kolejny programista
co jeśli okno zostanie otwarte za pomocą showModalDialog? Nie działa na IE10
bjan
Nie jestem pewien, czy to działa we wszystkich przeglądarkach, ale działa w IE11 !!! Dla jakiej przeglądarki mamy obecnie budować. Dziękuję za tę odpowiedź, zaoszczędziłeś mi wielu kłopotów.
CrazyPaste
Działa dobrze w IE 11, Chrome 76.0.3809, Firefox 69.0
Rahul Mahadik
57

Mój przyjacielu… jest sposób, ale „hack” nie zaczyna go opisywać. Zasadniczo musisz wykorzystać błąd w IE 6 i 7.

Działa za każdym razem!

Zamiast dzwonić window.close(), przekieruj na inną stronę.

Strona początkowa:

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

Przekieruj na inną stronę. To oszukuje IE, pozwalając ci zamknąć przeglądarkę na tej stronie.

Strona zamykająca:

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

Niesamowite co ?!

Nacięcie
źródło
1
Wiem, że to już 2 lata. Ale to niesamowite… Działa na IE 8 i Firefox 15
Susie
9
Wygląda na to, że Microsoft naprawił ten błąd w IE10. Czy ktoś wie, jak nadal możemy to osiągnąć w IE10?
Abhi Rampal
Zarówno self.close (), jak i window.close () nie działają dla IE po mojej stronie. Jednak Chrome, FF i Safari są w porządku
NoName
57

Skrypty nie mogą zamknąć okna, które otworzył użytkownik. Jest to uważane za zagrożenie bezpieczeństwa. Chociaż nie jest to w żadnym standardzie, wszyscy dostawcy przeglądarek postępują zgodnie z tym ( dokumentacja Mozilli ). Jeśli tak się dzieje w niektórych przeglądarkach, jest to błąd bezpieczeństwa, który (najlepiej) jest naprawiany bardzo szybko.

Żaden z hacków w odpowiedziach na to pytanie już nie działa, a jeśli ktoś wymyśli kolejny brudny hack, w końcu również przestanie działać.

Sugeruję, abyś nie marnował energii na walkę z tym i skorzystał z metody, którą daje Ci przeglądarka - zapytaj użytkownika, zanim pozornie zawiesisz jego stronę.

rvighne
źródło
5
Lub jeszcze prościej: w ogóle nie zamykaj okna. Jeśli skończysz, odeślij użytkownika z powrotem na swoją stronę główną lub do innej centralnej lokalizacji.
duskwuff
2
@duskwuff, Przeprowadzamy automatyczne testy w tych przeglądarkach. Muszą się zamknąć .
ouflak
2
@ouflak Z pewnością twój framework testowy ma jakiś sposób na manipulowanie oknami.
duskwuff
1
@duskwuff A co z bibliotekami innych firm, które zostawiają rozrzucone okna? Z pewnością nie możesz sugerować, żebym zostawił ten bałagan dla użytkownika lub przekierował go do (zduplikowanego) widoku strony głównej.
Opuszczony koszyk
1
Czy mógłbyś wyjaśnić również w swojej odpowiedzi jako przypis, dlaczego jest to zagrożenie bezpieczeństwa.
T.Todua
31

Oto funkcja Javascript, której używam do zamykania przeglądarki bez pytania lub ostrzeżenia, można ją również wywołać z Flasha. Powinien być w pliku html.

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

            }
        }
    }
Kuldip D. Gandhi
źródło
W IE 10.0.9200 otwieranie okna za pomocą showModalDialog. On closeWindows, otwiera nowe okno (tę samą stronę), podczas gdy poprzednie jest nadal otwarte.
bjan
Nie działał w przeglądarce Firefox, IE / Edge wyświetlał monit o potwierdzenie - działał jednak w przeglądarce Chrome.
Dymas
12

Działa to w Chrome 26, Internet Explorer 9 i Safari 5.1.7 ( bez użycia strony pomocniczej, ala odpowiedź Nicka):

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

Zagnieżdżenie window.openpowoduje, że IE nie wyświetla monitu Czy chcesz zamknąć to okno .

Niestety nie można zmusić Firefoksa do zamknięcia okna.

Danny Beckett
źródło
Pracował też dla IE 10.
Mukus,
11

W tagu body:

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

Aby zamknąć okno:

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

Testowano w przeglądarce Safari 4.0.5, FF dla komputerów Mac 3.6, IE 8.0 i FF dla systemu Windows 3.5

JimB
źródło
To funkcjonalnie to samo, co Nick.
naugtur
Tak. Jeśli poprawnie czytam post Nicka, sugeruje on przekierowanie przed wywołaniem window.close. Opublikowałem informację, jeśli nie chcesz używać przekierowania. Jeśli źle czytam przeprosiny Nicka.
JimB
7

Ze względów bezpieczeństwa okno można zamknąć w JavaScript tylko wtedy, gdy zostało otwarte przez JavaScript. Aby zamknąć okno, musisz otworzyć nowe okno z _selfcelem, który nadpisze twoje obecne okno, a następnie zamknij to okno (co możesz zrobić, ponieważ zostało otwarte przez JavaScript).

window.open('', '_self', '');
window.close();
jbabey
źródło
to działało dla mnie z Silverlight: HtmlPage.Window.Eval ("window.open ('', '_self', ''); window.close ();");
Mike Fuchs
6

Od tutaj :

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

Trzeba window.openerna coś ustawić , inaczej będzie narzekać.

Harley Holcombe
źródło
U mnie działa prawie 7 lat później w Chrome, FF i IE 10.
Mike Devenney
6

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

Przepraszam trochę za późno, ale znalazłem rozwiązanie, przynajmniej w moim przypadku. Testowano w przeglądarce Safari 11.0.3 i Google Chrome 64.0.3282.167

Mada Aryakusumah
źródło
5

Ze względu na ulepszenia zabezpieczeń w IE nie można zamknąć okna, dopóki nie zostanie otwarte przez skrypt. Aby obejść ten problem, należy pozwolić przeglądarce pomyśleć, że ta strona jest otwierana za pomocą skryptu, a następnie zamknąć okno. Poniżej znajduje się realizacja.

Spróbuj tego, to działa jak urok!
javascript zamknij bieżące okno bez pytania IE

<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 zamknij bieżące okno bez pytania IE

Vivek
źródło
2

Utwórz funkcję JavaScript

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

Teraz napisz ten kod i wywołaj powyższą funkcję JavaScript

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

Lub po prostu:

<a href="" onclick="closeme();">close</a>
Niloofar
źródło
2

To zadziała:

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

źródło
Pracował przy użyciu implementacji Chrome w Python Eel.
revliscano
1
window.opener=window;
window.close();
Danny Beckett
źródło
0

Przeglądarka narzeka, ponieważ używasz JavaScript do zamykania okna, które nie zostało otwarte w JavaScript, tj window.open('foo.html');.

Billy Jo
źródło
0

Najlepsze rozwiązanie jakie znalazłem to:

this.focus();
self.opener=this;
self.close();
Derek
źródło
0

Umieść następujący kod w pliku ASPX.

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

Umieść następujący kod w kodzie zdarzenia kliknięcia przycisku.

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

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

Jeśli nie masz żadnego przetwarzania przed zamknięciem, możesz bezpośrednio umieścić następujący kod w samym ASPX w tagu kliknięcia przycisku.

OnClientClick="CloseWindow();"

Mam nadzieję że to pomoże.

Kamleshkumar Gujarathi
źródło
Pytania dotyczą prostego rozwiązania javascript, unikaj ASPX.
Zeeshan
@Zeeshan: Każdy programista warty uwagi może zobaczyć, że JavaScript u góry postu Kamleshkumar Gujarathi może być zastosowany do ich własnych wymagań. Dotyk szorstki, gdybyś zlekceważył jego odpowiedź.
Paul
0

W mojej sytuacji następujący kod został osadzony w pliku php.

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;

Więc otworzyłem konsolę i napisałem co następuje

PreventExitPop = false

To rozwiązało problem. Więc znajdź kod JavaScript i znajdź zmienne i przypisz je do odpowiedniej „wartości”, która w moim przypadku była „fałszywa”

nurmurat
źródło
-3

Zamierzam to opublikować, ponieważ właśnie tego używam w mojej witrynie i działa zarówno w Google Chrome, jak i IE 10 bez otrzymywania żadnych wyskakujących wiadomości:

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

W mojej witrynie jest funkcja, którą chcę uruchomić, aby zapisać zmienną włączającą / wyłączającą w sesji bez bezpośredniego przechodzenia do nowej strony, więc po prostu otwieram niewielką wyskakującą stronę internetową. Ta strona internetowa zamyka się następnie natychmiast z onload="window.close();"funkcją.

Logan Hasbrouck
źródło
Tak: ale tak jak stackoverflow.com/a/24854246/2239406 informacje: otwierasz windo w javascript, a następnie możesz zamknąć za pomocą javascript.
Denis Chenu
cóż, jeśli to nie powinno działać i jeśli zostało to „załatane”, nadal działa bezbłędnie we wszystkich przeglądarkach na moim komputerze. Po prostu dostarczałem rozwiązanie, które obecnie dla mnie działa.
Logan Hasbrouck
Różnica polega na tym, że otwierasz okno w JS. Jeśli okno nie jest otwarte w JS: nie działa.
Denis Chenu
Nie, nie używam JS do otwierania okna; raczej używam az, target=_blankaby otworzyć małe okienko wyskakujące pod określonym adresem URL, a na koniec używam JS do zamknięcia okna. Chodzi o to, że określony adres URL zapisuje wartość w sesji, aby wyłączyć obrazy tła, chociaż tutaj wkrótce usunę go na korzyść Ajax, gdy tylko dowiem się, jak zrobić Ajax. (wciąż ucząc się lin persay)
Logan Hasbrouck