Comment puis-je fermer une fenêtre de navigateur sans recevoir l'invite «Voulez-vous fermer cette fenêtre»?


86

Comment puis-je fermer une fenêtre de navigateur sans recevoir l' invite Voulez-vous fermer cette fenêtre ?

L'invite se produit lorsque j'utilise la window.close();fonction.


22
le plus simple:window.open('','_self').close()
markasoftware

Dans Firefox, tout cela peut être sans objet si votre utilisateur désactive la fermeture de la fenêtre. kb.mozillazine.org
Brian

3
À moins que vous ne possédiez la fenêtre vous-même, vous ne devriez pas.
Robert Harvey

Réponses:


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

Cela fonctionne pour moi.


Fonctionne pour IE11, Safary 5.1.7, mais ne fonctionne pas dans FF et Chrome.
nikolai.serdiuk

Travailler dans Firefox 38.0.5 et Chrome 43
justanotherprogrammer

et si la fenêtre est ouverte en utilisant showModalDialog? Cela ne fonctionne pas sur IE10
bjan

Je ne sais pas si cela fonctionne dans tous les navigateurs, mais cela fonctionne dans IE11 !!! Quel est le navigateur pour lequel nous devons construire actuellement. Merci pour cette réponse, vous m'avez épargné beaucoup d'ennuis.
CrazyPaste

Fonctionne bien dans IE 11, Chrome 76.0.3809, Firefox 69.0
Rahul Mahadik

57

Mon ami ... il y a un moyen mais "hack" ne commence pas à le décrire. Vous devez essentiellement exploiter un bogue dans IE 6 et 7.

Fonctionne à chaque fois!

Au lieu d'appeler window.close(), redirigez vers une autre page.

Page d'ouverture:

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

Redirigez vers une autre page. Cela trompe IE en vous laissant fermer le navigateur sur cette page.

Page de clôture:

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

Génial hein?!


1
Je sais que ça fait déjà 2 ans. Mais c'est incroyable .. Fonctionne sur IE 8 et Firefox 15
Susie

9
On dirait que Microsoft a corrigé ce bogue dans IE10. Quelqu'un sait-il comment nous pouvons encore y parvenir dans IE10?
Abhi Rampal

Self.close () et window.close () ne fonctionnent pas pour IE de mon côté. Cependant, Chrome, FF et Safari vont bien
NoName

57

Les scripts ne sont pas autorisés à fermer une fenêtre ouverte par un utilisateur. Ceci est considéré comme un risque de sécurité. Bien que ce ne soit dans aucune norme, tous les fournisseurs de navigateurs le suivent ( Mozilla docs ). Si cela se produit dans certains navigateurs, c'est un bogue de sécurité qui (idéalement) est corrigé très rapidement.

Aucun des hacks dans les réponses à cette question ne fonctionne plus, et si quelqu'un proposait un autre hack sale, il cessera finalement de fonctionner également.

Je vous suggère de ne pas gaspiller d'énergie à lutter contre cela et d'adopter la méthode que le navigateur vous donne si utilement - demandez à l'utilisateur avant que vous ne plantiez apparemment sa page.


5
Ou, encore plus simple: ne fermez pas du tout la fenêtre. Si vous avez terminé, renvoyez l'utilisateur vers votre page d'accueil ou vers un autre type d'emplacement central.
duskwuff -inactive-

2
@duskwuff, nous exécutons des tests automatisés sur ces navigateurs. Ils doivent fermer .
ouflak

2
@ouflak Votre framework de test a sûrement un moyen de manipuler les fenêtres.
duskwuff -inactive-

1
@duskwuff Qu'en est-il des bibliothèques tierces qui laissent les fenêtres traîner? Vous ne pouvez sûrement pas suggérer que je laisse simplement ce désordre à l'utilisateur ou que je le redirige vers une vue (dupliquée) de la page d'accueil.
Panier abandonné

1
Pourriez-vous expliquer également dans votre réponse en note de bas de page, pourquoi il s'agit d'un risque de sécurité.
T.Todua

31

Voici la fonction Javascript que j'utilise pour fermer le navigateur sans invite ni avertissement, elle peut également être appelée depuis Flash. Il devrait être dans un fichier 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){

            }
        }
    }

Sur IE 10.0.9200, ouverture de la fenêtre à l'aide de showModalDialog. Activé closeWindows, il ouvre une nouvelle fenêtre (la même page) alors que la précédente est toujours ouverte.
bjan

Ne fonctionnait pas sur Firefox, IE / Edge a affiché une invite de confirmation - cela fonctionnait cependant sur Chrome.
Dymas

12

Cela fonctionne dans Chrome 26, Internet Explorer 9 et Safari 5.1.7 ( sans l'utilisation d'une page d'aide, ala réponse de Nick):

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

L'imbrication window.openconsiste à empêcher IE d'afficher l' invite Voulez-vous fermer cette fenêtre .

Malheureusement, il est impossible de faire fermer la fenêtre par Firefox.


A travaillé aussi pour IE 10.
Mukus

11

Dans la balise body:

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

Pour fermer la fenêtre:

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

Testé sur Safari 4.0.5, FF pour Mac 3.6, IE 8.0 et FF pour Windows 3.5


C'est fonctionnellement la même chose que Nick.
naugtur

Oui. Si je lis correctement le message de Nick, il suggère une redirection avant d'appeler window.close. Ce que j'ai publié, c'est si vous ne souhaitez pas utiliser de redirection. Si je lis mal le message de Nick, excuse-moi.
JimB

7

Pour des raisons de sécurité, une fenêtre ne peut être fermée en JavaScript que si elle a été ouverte par JavaScript. Pour fermer la fenêtre, vous devez ouvrir une nouvelle fenêtre avec _selfcomme cible, qui écrasera votre fenêtre actuelle, puis fermez celle-ci (ce que vous pouvez faire depuis son ouverture via JavaScript).

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

cela a fonctionné pour moi avec Silverlight: HtmlPage.Window.Eval ("window.open ('', '_self', ''); window.close ();");
Mike Fuchs

6

D' ici :

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

Vous devez vous mettre window.openerà quelque chose, sinon il se plaint.


Fonctionne pour moi, près de 7 ans plus tard dans Chrome, FF et IE 10.
Mike Devenney

6

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

Désolé un peu tard ici, mais j'ai trouvé la solution, du moins pour mon cas. Testé sur Safari 11.0.3 et Google Chrome 64.0.3282.167


5

En raison des améliorations de sécurité dans IE, vous ne pouvez pas fermer une fenêtre à moins qu'elle ne soit ouverte par un script. Le moyen de contourner ce problème sera donc de laisser le navigateur penser que cette page est ouverte à l'aide d'un script, puis de fermer la fenêtre. Voici la mise en œuvre.

Essayez ceci, cela fonctionne comme un charme!
javascript ferme la fenêtre actuelle sans invite 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 ferme la fenêtre actuelle sans invite IE


2

Créer une fonction JavaScript

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

Maintenant, écrivez ce code et appelez la fonction JavaScript ci-dessus

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

Ou simplement:

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

2

Cela fonctionnera:

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

A travaillé en utilisant l'implémentation Chrome de Python Eel.
revliscano


0

Le navigateur se plaint parce que vous utilisez JavaScript pour fermer une fenêtre qui n'a pas été ouverte avec JavaScript, c'est-à-dire window.open('foo.html');.


0

La meilleure solution que j'ai trouvée est:

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

0

Placez le code suivant dans ASPX.

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

Placez le code suivant dans le code derrière l'événement de clic sur le bouton.

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

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

Si vous n'avez aucun traitement avant la fermeture, vous pouvez directement placer le code suivant dans l'ASPX lui-même dans la balise de clic du bouton.

OnClientClick="CloseWindow();"

J'espère que cela t'aides.


Les questions demandent une solution javascript simple, évitez ASPX.
Zeeshan

@Zeeshan: Tout développeur digne de ce nom peut voir que le JavaScript en haut de l'article de Kamleshkumar Gujarathi peut être appliqué à ses propres besoins. Un peu dur si vous avez refusé sa réponse.
Paul

0

Dans ma situation, le code suivant a été intégré dans un fichier 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;

J'ai donc ouvert la console et écrit ce qui suit

PreventExitPop = false

Cela a résolu le problème. Alors, découvrez le code JavaScript et trouvez la ou les variables et attribuez-leur une "valeur" appropriée qui dans mon cas était "fausse"


-3

Je vais publier ceci car c'est ce que j'utilise actuellement pour mon site et cela fonctionne à la fois dans Google Chrome et IE 10 sans recevoir de messages contextuels:

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

J'ai une fonction sur mon site que je souhaite exécuter pour enregistrer une variable d'activation / désactivation dans la session sans accéder directement à une nouvelle page, je viens donc d'ouvrir une petite page Web contextuelle. Cette page Web se ferme alors immédiatement avec la onload="window.close();"fonction.


Oui: mais comme les informations stackoverflow.com/a/24854246/2239406 : vous ouvrez le windo en javascript, puis pouvez le fermer avec du javascript.
Denis Chenu

eh bien, s'il n'est pas censé fonctionner, et si cela a été "patché", il fonctionne toujours sur tous les navigateurs de mon PC sans faute. Je fournissais simplement une solution qui fonctionnait actuellement pour moi.
Logan Hasbrouck

La différence est: vous ouvrez la fenêtre dans JS. Si la fenêtre n'est pas ouverte dans JS: ne fonctionne pas.
Denis Chenu

Non, je n'utilise pas JS pour ouvrir la fenêtre; j'utilise plutôt un awith target=_blankpour ouvrir une petite fenêtre contextuelle à une URL spécifique, puis j'utilise finalement JS pour fermer la fenêtre. Son but est que l'URL spécifique enregistre une valeur dans la session pour désactiver les images d'arrière-plan, bien que je la supprimerai bientôt en faveur d'ajax une fois que j'aurai compris comment faire ajax. (toujours en train d'apprendre les ficelles du métier)
Logan Hasbrouck
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.