Wie kann ich ein Browserfenster schließen, ohne die Eingabeaufforderung "Möchten Sie dieses Fenster schließen?" Zu erhalten.

84

Wie kann ich ein Browserfenster schließen, ohne die Eingabeaufforderung Möchten Sie dieses Fenster schließen ?

Die Eingabeaufforderung tritt auf, wenn ich die window.close();Funktion verwende.

Derek
quelle
22
am einfachsten:window.open('','_self').close()
markasoftware
In Firefox kann dies alles umstritten sein, wenn Sie das Schließen des Fensters deaktivieren. kb.mozillazine.org/…
Brian
3
Wenn Sie das Fenster nicht selbst besitzen, sollten Sie es nicht
Robert Harvey
Nicht mehr möglich. stackoverflow.com/a/19768082/391101
Harvest316

Antworten:

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

Das funktioniert bei mir.

Arabam
quelle
Funktioniert für IE11, Safary 5.1.7, funktioniert jedoch nicht in FF und Chrome.
Nikolai.serdiuk
Arbeiten in Firefox 38.0.5 und Chrome 43
anderer Programmierer
Was ist, wenn das Fenster mit geöffnet wird showModalDialog? Es funktioniert nicht auf IE10
bjan
Nicht sicher, ob dies in allen Browsern funktioniert, aber es funktioniert in IE11 !!! Für welchen Browser müssen wir derzeit bauen? Vielen Dank für diese Antwort, Sie haben mir viel Ärger erspart.
CrazyPaste
Funktioniert gut in IE 11, Chrome 76.0.3809, Firefox 69.0
Rahul Mahadik
57

Skripte dürfen kein Fenster schließen, das ein Benutzer geöffnet hat. Dies wird als Sicherheitsrisiko angesehen. Obwohl dies in keinem Standard enthalten ist, befolgen alle Browser-Anbieter dies ( Mozilla-Dokumente ). Wenn dies in einigen Browsern passiert, handelt es sich um einen Sicherheitsfehler, der (im Idealfall) sehr schnell behoben wird.

Keiner der Hacks in den Antworten auf diese Frage funktioniert mehr, und wenn sich jemand einen anderen schmutzigen Hack einfallen lässt, funktioniert er schließlich auch nicht mehr.

Ich schlage vor, Sie verschwenden keine Energie, um dies zu bekämpfen, und nehmen die Methode an, die Ihnen der Browser so hilfreich bietet - fragen Sie den Benutzer, bevor Sie scheinbar seine Seite zum Absturz bringen.

rvighne
quelle
5
Oder noch einfacher: Schließen Sie das Fenster überhaupt nicht. Wenn Sie fertig sind, senden Sie den Benutzer zurück zu Ihrer Homepage oder an einen anderen zentralen Ort.
Abenddämmerung -inaktiv-
2
@duskwuff, wir führen automatisierte Tests für diese Browser durch. Sie müssen schließen .
Ouflak
2
@ouflak Sicherlich hat Ihr Test-Framework eine Möglichkeit, Fenster zu manipulieren.
Abenddämmerung -inaktiv-
1
@duskwuff Was ist mit Bibliotheken von Drittanbietern, bei denen Fenster herumliegen? Sie können sicherlich nicht vorschlagen, dass ich das Chaos einfach dem Benutzer überlasse oder sie in eine (doppelte) Ansicht der Homepage umleitete.
Verlassener Wagen
1
Könnten Sie auch in Ihrer Antwort als Fußnote erklären, warum es sich um ein Sicherheitsrisiko handelt?
T.Todua
56

Mein Freund ... es gibt einen Weg, aber "Hack" beginnt nicht, ihn zu beschreiben. Sie müssen grundsätzlich einen Fehler in IE 6 & 7 ausnutzen.

Funktioniert jedes Mal!

Anstatt anzurufen window.close(), leiten Sie zu einer anderen Seite weiter.

Eröffnungsseite:

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

Auf eine andere Seite umleiten. Dies täuscht den IE vor, dass Sie den Browser auf dieser Seite schließen können.

Abschlussseite:

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

Genial, oder?!

Nick
quelle
1
Ich weiß, es ist schon 2 Jahre her. Aber es ist erstaunlich. Arbeitet auf IE 8 und Firefox 15
Susie
9
Microsoft hat diesen Fehler in IE10 anscheinend behoben. Weiß jemand, wie wir dies in IE10 noch erreichen können?
Abhi Rampal
Sowohl self.close () als auch window.close () funktionieren auf meiner Seite nicht für IE. Chrome, FF und Safari sind jedoch in Ordnung
RDeveloper
31

Hier ist die Javascript-Funktion, mit der ich den Browser ohne Eingabeaufforderung oder Warnung schließe. Sie kann auch über Flash aufgerufen werden. Es sollte in einer HTML-Datei sein.

    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
quelle
Öffnen Sie unter IE 10.0.9200 das Fenster mit showModalDialog. Ein closeWindows, Es öffnet sich ein neues Fenster (dieselbe Seite), während das vorherige noch geöffnet ist.
Bjan
Funktionierte nicht in Firefox, IE / Edge zeigte eine Bestätigungsaufforderung an - es funktionierte jedoch in Chrome.
Dymas
12

Im Body-Tag:

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

So schließen Sie das Fenster:

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

Getestet auf Safari 4.0.5, FF für Mac 3.6, IE 8.0 und FF für Windows 3.5

JimB
quelle
Das ist funktional das gleiche, was Nick getan hat.
Naugtur
Ja. Wenn ich Nicks Beitrag richtig lese, schlägt er eine Weiterleitung vor, bevor er window.close aufruft. Was ich gepostet habe, ist, wenn Sie keine Weiterleitung verwenden möchten. Wenn ich Nicks Post falsch entschuldige, entschuldige ich mich.
JimB
11

Dies funktioniert in Chrome 26, Internet Explorer 9 und Safari 5.1.7 ( ohne die Verwendung einer Hilfeseite , ala Nicks Antwort):

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

Die Verschachtelung window.openbesteht darin, dass der IE die Eingabeaufforderung " Möchten Sie dieses Fenster schließen" nicht anzeigt .

Leider ist es nicht möglich, Firefox dazu zu bringen, das Fenster zu schließen.

Danny Beckett
quelle
Arbeitete auch für IE 10.
Mukus
7

Aus Sicherheitsgründen kann ein Fenster in JavaScript nur geschlossen werden, wenn es von JavaScript geöffnet wurde. Um das Fenster zu schließen, müssen Sie ein neues Fenster mit _selfdem Ziel öffnen , das Ihr aktuelles Fenster überschreibt, und dieses dann schließen (was Sie tun können, seit es über JavaScript geöffnet wurde).

window.open('', '_self', '');
window.close();
jbabey
quelle
Dies funktionierte bei mir mit Silverlight: HtmlPage.Window.Eval ("window.open ('', '_self', ''); window.close ();");
Mike Fuchs
6

Von hier aus :

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

Sie müssen sich window.openerauf etwas einstellen , sonst beschwert es sich.

Harley Holcombe
quelle
Funktioniert für mich, fast 7 Jahre später in Chrome, FF und IE 10.
Mike Devenney
6

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

Entschuldigung, hier etwas spät, aber ich habe die Lösung gefunden, zumindest für meinen Fall. Getestet auf Safari 11.0.3 und Google Chrome 64.0.3282.167

Mada Aryakusumah
quelle
5

Aufgrund der Sicherheitsverbesserungen im IE können Sie ein Fenster nur schließen, wenn es von einem Skript geöffnet wird. Der Weg dahin besteht darin, den Browser glauben zu lassen, dass diese Seite mit einem Skript geöffnet wird, und dann das Fenster zu schließen. Unten ist die Implementierung.

Versuchen Sie dies, es funktioniert wie ein Zauber!
Javascript aktuelles Fenster ohne Aufforderung IE schließen

<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 aktuelles Fenster ohne Aufforderung IE schließen

Vivek
quelle
2

Erstellen Sie eine JavaScript-Funktion

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

Schreiben Sie nun diesen Code und rufen Sie die obige JavaScript-Funktion auf

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

Oder einfach:

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

Das wird funktionieren :

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

quelle
Arbeitete mit der Chrome-Implementierung von Python Eel.
Revliscano
1
window.opener=window;
window.close();
Danny Beckett
quelle
0

Der Browser beschwert sich, weil Sie JavaScript verwenden, um ein Fenster zu schließen, das nicht mit JavaScript geöffnet wurde, d window.open('foo.html');. H.

Billy Jo
quelle
0

Die beste Lösung, die ich gefunden habe, ist:

this.focus();
self.opener=this;
self.close();
Derek
quelle
0

Fügen Sie den folgenden Code in die ASPX ein.

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

Fügen Sie den folgenden Code in den Code hinter dem Klickereignis ein.

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

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

Wenn Sie vor dem Schließen keine Verarbeitung haben, können Sie den folgenden Code direkt in die ASPX selbst im Button-Click-Tag einfügen.

OnClientClick="CloseWindow();"

Hoffe das hilft.

Kamleshkumar Gujarathi
quelle
Die Fragen fragen nach einer einfachen Javascript-Lösung, vermeiden Sie ASPX.
Zeeshan
@Zeeshan: Jeder Entwickler, der sein Geld wert ist, kann sehen, dass das JavaScript oben in Kamleshkumar Gujarathis Beitrag auf seine eigenen Anforderungen angewendet werden kann. Eine harte Berührung, wenn Sie seine Antwort abgelehnt haben.
Paul
0

In meiner Situation wurde der folgende Code in eine PHP-Datei eingebettet.

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;

Also habe ich die Konsole geöffnet und folgendes geschrieben

PreventExitPop = false

Dies löste das Problem. Finden Sie also den JavaScript-Code heraus, suchen Sie die Variablen und weisen Sie sie einem geeigneten "Wert" zu, der in meinem Fall "falsch" war.

nurmurat
quelle
-3

Ich werde dies veröffentlichen, da dies derzeit für meine Website verwendet wird und es sowohl in Google Chrome als auch in IE 10 funktioniert, ohne dass Popup-Nachrichten empfangen werden:

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

Ich habe eine Funktion auf meiner Site, die ich ausführen möchte, um eine Ein / Aus-Variable in einer Sitzung zu speichern, ohne direkt zu einer neuen Seite zu wechseln. Ich öffne einfach eine winzige Popup-Webseite. Diese Webseite schließt sich dann sofort mit der onload="window.close();"Funktion.

Logan Hasbrouck
quelle
Ja, aber wie bei stackoverflow.com/a/24854246/2239406 Informationen: Sie öffnen den Windo in Javascript und können ihn dann mit Javascript schließen.
Denis Chenu
Nun, wenn es nicht funktionieren soll und wenn dies "gepatcht" wurde, funktioniert es immer noch auf allen Browsern auf meinem PC. Ich habe lediglich eine Lösung bereitgestellt, die derzeit für mich funktioniert.
Logan Hasbrouck
Der Unterschied ist: Sie öffnen das Fenster in JS. Wenn das Fenster in JS nicht geöffnet wird: funktioniert nicht.
Denis Chenu
Nein, ich benutze JS nicht, um das Fenster zu öffnen. Stattdessen benutze ich ein amit target=_blank, um ein winziges Popup-Fenster mit einer bestimmten URL zu öffnen, und schließlich benutze ich JS, um das Fenster zu schließen. Der Zweck ist, dass die spezifische URL einen Wert für die Sitzung speichert, um Hintergrundbilder zu deaktivieren, obwohl ich sie hier bald zugunsten von Ajax löschen werde, sobald ich herausgefunden habe, wie Ajax ausgeführt wird. (lernt immer noch die Seile weiter)
Logan Hasbrouck