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

436

Je veux 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 devrait apparaître lui demandant 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?

Naveed
la source
Je pourrais être en retard ici , mais ceci est empêché par les navigateurs pour une raison. <br> Pensez - vous essayer de fermer une fenêtre encore et encore et il est ne pas fermer comme faisant le « si aucune partie » de votre question c'est «ne rien faire». <br> <br> Ce sera irritant à coup sûr!
Muhammad Osama

Réponses:

503

Vous aurez besoin de Javascript pour cela. Utilisation window.close():

close();

Remarque: l'onglet actuel est implicite. C'est équivalent:

window.close();

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

Donc:

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 falseici 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 window.confirm()boîte de dialogue seront OK et Annuler (pas Oui et Non). Si vous voulez vraiment Oui et Non, vous devrez créer une sorte de boîte de dialogue Javascript modale.

Remarque: il existe des différences spécifiques au navigateur avec ce qui précède. 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 crois qu'IE demandera une confirmation à l'utilisateur. Les autres navigateurs peuvent varier.

cletus
la source
387
Vous ne pouvez fermer aucun onglet via JavaScript. "Cette méthode ne peut être appelée que pour les fenêtres ouvertes par un script à l'aide de la méthode window.open." En d'autres termes, vous ne pouvez utiliser JavaScript que pour fermer une fenêtre / un onglet qui a été généré via JavaScript.
Ryan Joy
7
-1 Ne fonctionne pas sur Chrome 30 PC, les autres réponses indiquant d'ouvrir une fenêtre dans l'onglet actuel, puis de la fermer
Markasoftware
2
En about:config dom.allow_scripts_to_close_windows = truepourrait être la solution dans Firefox (pourrait être un gros risque pour la sécurité!)
Nepomuk Frädrich
6
Le navigateur n'autorise pas ce comportement. Javascript ne peut fermer qu'un onglet qu'il a ouvert.
Edward Kennedy
1
Cela fonctionne (au moins) dans Chrome 62: <button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> Voir aussi cet article
Hering
247

Essaye ça

<a href="javascript:window.open('','_self').close();">close</a>
Daniel Shen
la source
2
Travailler dans Firefox 31.0
Adrian Carr
1
Le mauvais côté de cette solution est qu'une demande d'obtention est envoyée au serveur. Mais de l'autre côté, je n'ai trouvé aucune autre solution.
100r
18
Faire cela à partir des sorties de la console Chrome "Les scripts ne peuvent fermer que les fenêtres qui ont été ouvertes par lui"
parlement
Ça ne marche pas. Les scripts ne peuvent fermer que les fenêtres qui ont été ouvertes par celui-ci.
Roman Losev
1
Ne fonctionne pas dans Chrome 60.0.3079.0: "Les scripts peuvent fermer uniquement les fenêtres qui ont été ouvertes par lui."
Our_Benefactors
65

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>
Palesz
la source
56
Plus simple:open(location, '_self').close();
uınbɐɥs
Cela fonctionnait bien dans IE 11, mais ne fonctionnait pas dans Chrome 38
Yann Duran
31

Pour autant que je sache, ce n'est plus possible dans Chrome ou FireFox. Cela peut toujours être possible dans IE (au moins avant Edge).

Guy Schalnat
la source
2
Cela fonctionne (au moins) dans Chrome 62: <button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> Voir aussi cet article
Hering
@hering Eh bien, l'article date de 2006, mais si vous avez trouvé quelque chose qui fonctionne, c'est une excellente nouvelle et cela aidera peut-être les gens qui ont lu jusqu'ici. Merci d'avoir partagé.
Guy Schalnat
La question était de fermer l'onglet actif actuel à partir de cet onglet. Comme vous le dites, ce n'est pas possible dans Chrome ou Firefox. Ce devrait être la réponse acceptée.
décède le
14

C'est possible. J'ai cherché sur tout le net pour cela, mais une fois quand j'ai répondu à l'une des enquêtes de Microsoft, j'ai finalement obtenu la réponse.

essaye ça:

window.top.close();

cela fermera l'onglet actuel pour vous.


la source
12
"Les scripts ne peuvent fermer que les fenêtres qui ont été ouvertes par lui." sur Chrome 50.
Husky
7

Testé avec succès dans 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>

Les crédits vont à Marcos J. Drake .

Julesfrog
la source
Pas owrking sur chrome "Les scripts peuvent fermer uniquement les fenêtres qui ont été ouvertes par lui."
César León
7

Essayez cela 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>
Bhavin Shah
la source
ne fonctionne pas sur Firefox Quantum 68.0.1
Zeke
7

Les éléments suivants fonctionnent 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, y compris l'ouverture d'une page Web réelle, mais rien ne semble fonctionner. Si je comprends bien, tout navigateur fermera un onglet ou une fenêtre avec xxx.close () s'il a vraiment été ouvert par JS, mais FF, au moins, ne peut pas être dupé pour fermer un onglet en ouvrant du nouveau contenu à l'intérieur de cet onglet.

Cela a du sens quand on y pense - un utilisateur peut ne pas vouloir que JS ferme un onglet ou une fenêtre qui a un historique utile.

Thaïlandais
la source
Chrome: 'TypeError non capturé: impossible de définir la propriété' innerHTML 'de null'
Francisco Corrales Morales
5

Désolé pour le nécropostage, mais j'ai récemment implémenté un site hébergé local qui avait besoin de pouvoir fermer l'onglet du navigateur actuel et trouvé des solutions de contournement intéressantes qui ne sont pas bien documentées où que je puisse trouver, alors je me suis engagé à le faire.

Remarque: Ces solutions de contournement ont été effectuées avec un site hébergé localement à l'esprit et (à l'exception d'Edge) nécessitent que le navigateur soit spécifiquement configuré, donc ne serait pas idéal pour les sites hébergés publiquement.

Contexte: Par le passé, le script jQuery window.close()était capable de fermer l'onglet actuel sans problème sur la plupart des navigateurs. Cependant, les navigateurs modernes ne prennent plus en charge ce script, potentiellement pour des raisons de sécurité.

Google Chrome:

Chrome n'autorise pas l'exécution du script window.close () et rien ne se passe si vous essayez de l'utiliser. En utilisant le plugin Chrome TamperMonkey, nous pouvons cependant utiliser la méthode window.close () si vous incluez le // @grant window.closedans l'en-tête UserScript de TamperMonkey.

Par exemple, mon script (qui est déclenché lorsqu'un bouton avec id = 'close_page' est cliqué et si 'oui' est pressé dans la fenêtre contextuelle du navigateur) ressemble à:

// ==UserScript==
// @name         Close Tab Script
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Closes current tab when triggered
// @author       Mackey Johnstone
// @match        http://localhost/index.php
// @grant        window.close
// @require      http://code.jquery.com/jquery-3.4.1.min.js
// ==/UserScript==

(function() {
    'use strict';
    $("#close_page").click(function() {
        var confirm_result = confirm("Are you sure you want to quit?");
        if (confirm_result == true) {
            window.close();
        }
    });
})();

Remarque: Cette solution ne peut cependant fermer l'onglet que si ce n'est PAS le dernier onglet ouvert. Donc, efficacement, il ne peut pas fermer l'onglet si cela provoquait la fermeture de la fenêtre en étant le dernier onglet ouvert.

Firefox:

Firefox a un paramètre avancé que vous pouvez activer pour permettre aux scripts de fermer les fenêtres, ce qui active efficacement la window.close()méthode. Pour activer ce paramètre, accédez à about: config puis recherchez et recherchez la préférence dom.allow_scripts_to_close_windows et passez de false à true.

Cela vous permet d'utiliser la window.close()méthode directement dans votre fichier jQuery comme vous le feriez pour tout autre script.

Par exemple, ce script fonctionne parfaitement avec la préférence définie sur true:

<script>
  $("#close_page").click(function() {
    var confirm_result = confirm("Are you sure you want to quit?");
    if (confirm_result == true) {
      window.close();
    }
  });
</script>

Cela fonctionne beaucoup mieux que la solution de contournement de Chrome car il permet à l'utilisateur de fermer l'onglet actuel même s'il s'agit du seul onglet ouvert et ne nécessite pas de plug-in tiers. Le seul inconvénient, cependant, est qu'il permet également à ce script d'être exécuté par différents sites Web (pas seulement celui sur lequel vous prévoyez de l'utiliser), ce qui pourrait potentiellement constituer un danger pour la sécurité, bien que je ne puisse pas imaginer que la fermeture de l'onglet actuel soit particulièrement dangereuse.

Bord:

Décevant, Edge a en fait réalisé le meilleur des 3 navigateurs que j'ai essayés et a travaillé avec la window.close()méthode sans nécessiter de configuration. Lorsque le window.close()script est exécuté, une fenêtre contextuelle supplémentaire vous avertit que la page tente de fermer l'onglet actuel et vous demande si vous souhaitez continuer.

entrez la description de l'image ici

Remarque finale: Les solutions pour Chrome et Firefox sont des solutions de contournement pour quelque chose que les navigateurs ont intentionnellement désactivé, potentiellement pour des raisons de sécurité. Ils exigent également que l'utilisateur configure au préalable leurs navigateurs pour qu'ils soient compatibles, ce qui ne serait probablement pas viable pour les sites destinés à un usage public, mais ils sont idéaux pour les solutions hébergées localement comme la mienne.

J'espère que cela vous a aidé! :)

Mackey Johnstone
la source
5

En ce qui concerne les personnes qui visitent encore cette page, vous êtes uniquement autorisé à fermer un onglet ouvert par un script OU en utilisant la balise d'ancrage HTML avec _blank cible. Les deux peuvent être fermés en utilisant le

<script>
    window.close();
</script>
killstreet
la source
Cela fonctionne dans tous les navigateurs modernes. IE11 et Edge 17 affichent une alerte de confirmation mais cela fonctionne toujours.
Fabian von Ellerts
1
<button class="closeButton" style="cursor: pointer" onclick="window.close();">Close Window</button>

cela a fait le travail pour moi

pikax
la source
1

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 a close()été ouverte par un script utilisant la méthode window.open ().

! (Veuillez voir le commentaire de @killstreet ci-dessous à propos de la balise d'ancrage avec la cible _blank)

TLDR : chrome & firefox permettent de les fermer.

vous obtiendrez une erreur de console: les scripts peuvent ne pas fermer les fenêtres qui n'ont pas été 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 le temps) - mais c'est juste un hack et non une fonctionnalité native et échouera dans certains cas.

je ne pouvais pas trouver de moyen de savoir si la page a été ouverte à partir d'un open () ou non, et fermer ne lancera pas et des erreurs. cela n'imprimera pas "test":

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

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

calios
la source
2
Ce ne sont pas seulement les onglets qui ont été ouverts par des scripts, mais une balise d'ancrage avec _blank cible pourra être fermée. Jusqu'à présent, testé dans Chrome et Firefox et les deux semblent permettre de fermer les onglets qui ont été ouverts par une balise d'ancrage.
killstreet
-1

Voici comment créer un tel lien:

<a href="javascript:if(confirm('Close window?'))window.close()">close</a>

Eric Mickelsen
la source
-1

C'est une façon de résoudre le même problème, déclarez une fonction JavaScript comme celle-ci

<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>
Mohsin Chaudhari
la source