web-dev-qa-db-fra.com

Comment fermer l'onglet actuel dans une fenêtre de navigateur?

Je souhaite créer un lien sur une page Web qui fermerait l'onglet actuellement actif dans un navigateur sans fermer les autres onglets du navigateur. 
Lorsque l'utilisateur clique sur le lien de fermeture, un message d'alerte doit apparaître pour lui demander de confirmer avec deux boutons, "OUI" et "NON". Si l'utilisateur clique sur "OUI", fermez cette page et si "NON", ne faites rien.

Comment ceci peut être fait? Aucune suggestion?

358
Naveed

Vous aurez besoin de Javascript pour le faire. Utilisez window.close() :

close();

Note: l'onglet actuel est impliqué. Ceci est équivalent:

window.close();

ou vous pouvez spécifier une fenêtre différente.

Alors:

function close_window() {
  if (confirm("Close Window?")) {
    close();
  }
}

avec HTML:

<a href="javascript:close_window();">close</a>

ou:

<a href="#" onclick="close_window();return false;">close</a>

Vous return false ici pour empêcher le comportement par défaut de l'événement. Sinon, le navigateur tentera d'accéder à cette URL (ce qui n'est évidemment pas le cas).

Maintenant, les options de la boîte de dialogue window.confirm() seront OK et Annuler (pas Oui et Non). Si vous vraiment voulez oui et non, vous devrez créer une sorte de boîte de dialogue Javascript modale.

Remarque: il existe des différences spécifiques à votre navigateur. Si vous avez ouvert la fenêtre avec Javascript (via window.open()), vous êtes autorisé à fermer la fenêtre avec javascript. Firefox vous interdit de fermer d'autres fenêtres. Je pense que IE demandera une confirmation à l'utilisateur. Les autres navigateurs peuvent varier.

425
cletus

Essaye ça

<a href="javascript:window.open('','_self').close();">close</a>
226
Daniel Shen

Cette méthode fonctionne dans Chrome et IE:

<a href="blablabla" onclick="setTimeout(function(){var ww = window.open(window.location, '_self'); ww.close(); }, 1000);">
    If you click on this the window will be closed after 1000ms
</a>
64
Palesz

Autant que je sache, cela n’est plus possible sous Chrome ou FireFox. Cela peut encore être possible dans IE (au moins avant l’Edge).

22
Guy Schalnat

C'est possible. J'ai cherché dans tout le réseau pour cela, mais une fois lorsque j'ai participé à l'une des enquêtes de Microsoft, j'ai finalement obtenu la réponse.

essaye ça:

window.top.close();

cela fermera l'onglet en cours pour vous.

16
user3239333

Testé avec succès en FF 18 et Chrome 24:

Insérer dans la tête:

<script>
    function closeWindow() {
        window.open('','_parent','');
        window.close();
    }
</script> 

HTML:

<a href="javascript:closeWindow();">Close Window</a>

Crédits vont à Marcos J. Drake .

6
Julesfrog

Ce qui suit fonctionne pour moi dans Chrome 41:

function leave() {
  var myWindow = window.open("", "_self");
  myWindow.document.write("");
  setTimeout (function() {myWindow.close();},1000);
}

J'ai essayé plusieurs idées pour FF, notamment l'ouverture d'une page Web, mais rien ne semble fonctionner. Pour autant que je sache, tout navigateur va fermer un onglet ou une fenêtre avec xxx.close () s’il s’agissait de vraiment ouvert par JS, mais FF, du moins, ne peut être dupe à fermer un onglet en ouvrant un nouveau contenu cet onglet.

Cela a du sens lorsque vous y réfléchissez - un utilisateur peut ne pas vouloir que JS ferme un onglet ou une fenêtre contenant un historique utile.

6
Thailandian

Essayez ceci aussi. Travailler pour moi sur les trois principaux navigateurs. 

<!-- saved from url=(0014)about:internet -->
<a href="#" onclick="javascript:window.close();opener.window.focus();" >Close Window</a>
6
Bhavin Shah

En ce qui concerne les personnes qui visitent encore cette page, vous n'êtes autorisé à fermer un onglet ouvert par un script OR à l'aide de la balise d'ancrage HTML avec target _blank. Ces deux peuvent être fermés en utilisant le

<script>
window.close();
</script>
1
killstreet
<button class="closeButton" style="cursor: pointer" onclick="window.close();">Close Window</button>

cela a fait le travail pour moi

0
pikax

un peu tard mais c’est ce que j’ai découvert ...

window.close() ne fonctionnera (IE est une exception) que si la fenêtre que vous essayez de close() a été ouverte par un script utilisant la méthode window.open ().

vous obtiendrez une erreur de console: Les scripts ne peuvent pas fermer les fenêtres non ouvertes par le script. comme une erreur et rien d'autre.

vous pouvez ajouter un paramètre unique dans l'URL pour savoir si la page a été ouverte à partir d'un script (comme time) - mais c'est juste un hack et non une fonctionnalité native et fail dans certains cas.

je ne pouvais trouver aucun moyen de savoir si la page avait été ouverte à partir d'un open () ou non, et close ne lanceraient pas et erreurs .ceci n'imprimera PAS "test":

try{
  window.close();
}
catch (e){
  console.log("text");
}

vous pouvez lire dans MDN plus sur la fonction close () } _ 

0
calios

C’est une façon de résoudre le même problème, déclarez une fonction JavaScript comme ceci

<script>
  function Exit() {
     var x=confirm('Are You sure want to exit:');
     if(x) window.close();
   }
</script>

Ajoutez la ligne suivante au code HTML pour appeler la fonction à l'aide d'un <button>

<button name='closeIt' onClick="Exit()" >Click to exit </Button>
0
Mohsin Chaudhari

Je suis peut-être en retard mais les navigateurs l’empêchent pour une raison.

Imaginez que vous essayez de fermer une fenêtre encore et encore et que celle-ci ne se ferme pas comme si elle faisait la partie " si non " de votre question qui consiste à "ne rien faire".

Ce sera certainement irritant!

0
Muhammad Osama