Come posso chiudere una finestra del browser senza ricevere il messaggio "Chiudere questa finestra"?


86

Come posso chiudere una finestra del browser senza ricevere il prompt Vuoi chiudere questa finestra ?

Il prompt si verifica quando utilizzo la window.close();funzione.


22
più semplice:window.open('','_self').close()
markasoftware

In Firefox, tutto questo può essere discutibile se l'utente disabilita la chiusura della finestra. kb.mozillazine.org/…
Brian

3
A meno che tu non sia il proprietario della finestra, non dovresti.
Robert Harvey

Risposte:


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

Questo funziona per me.


Funziona per IE11, Safary 5.1.7, ma non funziona in FF e Chrome.
nikolai.serdiuk

Lavorare in Firefox 38.0.5, e Chrome 43
justanotherprogrammer

cosa succede se la finestra viene aperta utilizzando showModalDialog? Non funziona su IE10
bjan

Non sono sicuro che funzioni in tutti i browser, ma funziona in IE11 !!! Qual è il browser per cui dobbiamo costruire, attualmente. Grazie per questa risposta, mi hai risparmiato molti problemi.
KidBilly

Funziona bene in IE 11, Chrome 76.0.3809, Firefox 69.0
Rahul Mahadik

57

Amico mio ... c'è un modo ma "hack" non inizia a descriverlo. Devi fondamentalmente sfruttare un bug in IE 6 e 7.

Funziona sempre!

Invece di chiamare window.close(), reindirizza a un'altra pagina.

Pagina di apertura:

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

Reindirizza a un'altra pagina. Questo inganna IE facendoti chiudere il browser su questa pagina.

Pagina di chiusura:

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

Fantastico eh ?!


1
So che sono già passati 2 anni. Ma è incredibile .. Funziona su IE 8 e Firefox 15
Susie

9
Sembra che Microsoft abbia corretto questo bug in IE10. Qualcuno sa come possiamo ancora raggiungere questo obiettivo in IE10?
Abhi Rampal

Sia self.close () che window.close () non funzionano per IE da parte mia. Tuttavia, Chrome, FF e Safari vanno bene
NoName

57

Gli script non sono autorizzati a chiudere una finestra aperta da un utente. Questo è considerato un rischio per la sicurezza. Sebbene non sia in alcuno standard, tutti i fornitori di browser lo seguono ( documenti Mozilla ). Se ciò accade in alcuni browser, è un bug di sicurezza che (idealmente) viene corretto molto rapidamente.

Nessuno degli hack nelle risposte a questa domanda funziona più e se qualcuno inventasse un altro hack sporco, alla fine smetterà di funzionare.

Ti suggerisco di non sprecare energie per combattere questo e di abbracciare il metodo che il browser ti offre così utilmente: chiedi all'utente prima che apparentemente si blocchi la sua pagina.


5
O ancora più semplice: non chiudere affatto la finestra. Se hai finito, rimanda l'utente alla tua home page o ad un altro tipo di posizione centrale.
duskwuff -inattivo-

2
@duskwuff, stiamo eseguendo test automatici su questi browser. Devono chiudere .
ouflak

2
@ouflak Sicuramente il tuo framework di test ha un modo per manipolare le finestre.
duskwuff -inattivo-

1
@duskwuff E le librerie di terze parti che lasciano finestre sparse? Sicuramente non puoi suggerire di lasciare quel casino per l'utente o di reindirizzarlo a una visualizzazione (duplicata) della home page.
Carrello abbandonato

1
Potresti spiegare anche nella tua risposta come nota in calce, perché è un rischio per la sicurezza.
T.Todua

31

Ecco la funzione Javascript che utilizzo per chiudere il browser senza prompt o avviso, può essere richiamata anche da Flash. Dovrebbe essere in un file 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){

            }
        }
    }

In IE 10.0.9200, aprendo la finestra usando showModalDialog. On closeWindows, apre una nuova finestra (la stessa pagina) mentre la precedente è ancora aperta.
bjan

Non funzionava su Firefox, IE / Edge mostrava una richiesta di conferma, ma funzionava su Chrome.
Dymas

12

Funziona in Chrome 26, Internet Explorer 9 e Safari 5.1.7 ( senza l'uso di una pagina di aiuto, come la risposta di Nick):

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

L'annidamento window.openserve a fare in modo che IE non visualizzi il prompt Vuoi chiudere questa finestra .

Sfortunatamente è impossibile far chiudere la finestra a Firefox.


Ha funzionato anche per IE 10.
Mukus

11

Nel tag del corpo:

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

Per chiudere la finestra:

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

Testato su Safari 4.0.5, FF per Mac 3.6, IE 8.0 e FF per Windows 3.5


Funzionalmente è la stessa cosa che ha fatto Nick.
naugtur

Sì. Se sto leggendo correttamente il post di Nick, suggerisce un reindirizzamento prima di chiamare window.close. Quello che ho postato è se non vuoi usare un reindirizzamento. Se sto interpretando male le scuse del post di Nick.
JimB

7

Per motivi di sicurezza, una finestra può essere chiusa in JavaScript solo se è stata aperta da JavaScript. Per chiudere la finestra, è necessario aprire una nuova finestra con _selfcome destinazione, che sovrascriverà la finestra corrente, quindi chiudere quella (cosa che puoi fare poiché è stata aperta tramite JavaScript).

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

questo ha funzionato per me con Silverlight: HtmlPage.Window.Eval ("window.open ('', '_self', ''); window.close ();");
Mike Fuchs

6

Da qui :

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

Devi impostare window.openerqualcosa, altrimenti si lamenta.


Funziona per me, quasi 7 anni dopo in Chrome, FF e IE 10.
Mike Devenney

6

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

Scusa un po 'tardi qui, ma ho trovato la soluzione, almeno per il mio caso. Testato su Safari 11.0.3 e Google Chrome 64.0.3282.167


5

A causa dei miglioramenti della sicurezza in IE, non è possibile chiudere una finestra a meno che non venga aperta da uno script. Quindi il modo per aggirare questo sarà lasciare che il browser pensi che questa pagina sia stata aperta usando uno script, e poi chiudere la finestra. Di seguito è riportata l'implementazione.

Prova questo, funziona a meraviglia!
javascript chiude la finestra corrente senza prompt 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 chiude la finestra corrente senza prompt IE


2

Crea una funzione JavaScript

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

Ora scrivi questo codice e chiama la funzione JavaScript sopra

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

O semplicemente:

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

2

Questo funzionerà:

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

Ha funzionato utilizzando l'implementazione di Chrome di Python Eel.
revliscano l'


0

Il browser si lamenta perché stai utilizzando JavaScript per chiudere una finestra che non è stata aperta con JavaScript, ad es window.open('foo.html');.


0

La migliore soluzione che ho trovato è:

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

0

Inserisci il codice seguente nell'ASPX.

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

Inserisci il codice seguente nell'evento di clic sul pulsante code behind.

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

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

Se non si dispone di alcuna elaborazione prima della chiusura, è possibile inserire direttamente il codice seguente nell'ASPX stesso nel tag di clic del pulsante.

OnClientClick="CloseWindow();"

Spero che sia di aiuto.


Le domande richiedono una semplice soluzione javascript, evitare ASPX.
Zeeshan

@Zeeshan: Qualsiasi sviluppatore degno di questo nome può vedere che il JavaScript nella parte superiore del post di Kamleshkumar Gujarathi può essere applicato alle proprie esigenze. Un tocco duro se hai scartato la sua risposta.
Paul

0

Nella mia situazione il seguente codice è stato incorporato in un file 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;

Quindi ho aperto la console e ho scritto quanto segue

PreventExitPop = false

Questo ha risolto il problema. Quindi, trova il codice JavaScript e trova le variabili e assegnale a un "valore" appropriato che nel mio caso era "falso"


-3

Lo pubblicherò perché è quello che sto utilizzando attualmente per il mio sito e funziona sia in Google Chrome che in IE 10 senza ricevere alcun messaggio popup:

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

Ho una funzione sul mio sito che voglio eseguire per salvare una variabile di attivazione / disattivazione nella sessione senza passare direttamente a una nuova pagina, quindi apro solo una piccola pagina Web popup. Quella pagina web si chiude quindi immediatamente con la onload="window.close();"funzione.


Sì: ma come le informazioni stackoverflow.com/a/24854246/2239406 : apri il windo in javascript, quindi puoi chiudere con javascript.
Denis Chenu

beh, se non dovrebbe funzionare, e se è stato "patchato", funziona ancora su tutti i browser del mio pc senza errori. Stavo semplicemente fornendo una soluzione che al momento funzionava per me.
Logan Hasbrouck

La differenza è: apri la finestra in JS. Se la finestra non si apre in JS: non funziona.
Denis Chenu

No, non sto usando JS per aprire la finestra; piuttosto sto usando un acon target=_blankper aprire una piccola finestra popup a un URL specifico, quindi alla fine uso JS per chiudere la finestra. Lo scopo è che l'URL specifico salvi un valore nella sessione per disabilitare le immagini di sfondo, anche se qui presto lo cancellerò a favore di ajax una volta che avrò capito come fare ajax. (ancora imparando le basi)
Logan Hasbrouck
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.