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.


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.


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


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


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

            }
        }
    }

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.


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


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();

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


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


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


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>

2

To zadziała:

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

Pracował przy użyciu implementacji Chrome w Python Eel.
— revliscano


0

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


0

Najlepsze rozwiązanie jakie znalazłem to:

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

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.


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”


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.