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.

Derek
la source
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
Plus possible. stackoverflow.com/a/19768082/391101
Harvest316

Réponses:

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

Cela fonctionne pour moi.

Arabam
la source
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?!

pseudo
la source
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.

rvighne
la source
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){

            }
        }
    }
Kuldip D Gandhi
la source
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.

Danny Beckett
la source
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

JimB
la source
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();
jbabey
la source
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.

Harley Holcombe
la source
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

Mada Aryakusumah
la source
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

Vivek
la source
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>
Niloofar
la source
2

Cela fonctionnera:

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

la source
A travaillé en utilisant l'implémentation Chrome de Python Eel.
revliscano
1
window.opener=window;
window.close();
Danny Beckett
la source
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');.

Billy Jo
la source
0

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

this.focus();
self.opener=this;
self.close();
Derek
la source
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.

Kamleshkumar Gujarathi
la source
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"

Nurmurat
la source
-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.

Logan Hasbrouck
la source
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