Aller au contenu

[RESOLU] [HTML] Gestion des fenêtres


diabo852

Messages recommandés

Bonjour,

J'utilise la fonction target="_blank" dans l'onglet 1 qui ouvre un onglet 2 (Fenêtre). Mon onglet 1 contenant la liste de mes articles qui s’afficheront dans l'onglet 2, je souhaiterais savoir si vous avez une piste afin de ne pas ouvrir un nouvel onglet 3,4 ou 5 à chaque clic sur un lien d'article de mon onglet 1.

Petit PS : Oui j'ai déjà regardé sur Google :D

Merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Bon avant de répondre, je tiens à dire et/ou rappeler qu'ouvrir un nouvel onglet sans le consentement de l'utilisateur n'est pas une bonne chose, la quasi totalité des navigateurs permettant facilement d'ouvrir un lien dans nouvel onglet s'il le souhaite. Sauf que si l'on force le lien à s'ouvrir dans un nouvel onglet avec de l'HTML, le navigateur ne propose pas la fonction inverse pour l'ouvrir forcément dans l'onglet actuel.

Maintenant que c'est dit, voici ce qu'il en est pour la réponse. En pur HTML, il n'est pas possible de réutiliser un onglet ouvert par une page, enfin pas à ma connaissance. Par contre, c'est tout à fait possible en JavaScript avec window.open(). Il suffit de récupérer ce que la fonction retourne, à savoir l'objet window du nouvel onglet, et de modifier son attribut location pour changer de page. Si jamais certains navigateurs refusent de le faire par raison de sécurité, ce dont je n'ai absolument pas la moindre idée, il restera sinon toujours la possibilité de fermer cet onglet avant d'en ouvrir un nouveau avec la bonne page.

Si ça te convient comme solution mais que tu ne sais pas trop comment procéder, n'hésite pas. ;)

Bonne fin de journée. :byebye:

Lien vers le commentaire
Partager sur d’autres sites

Bon alors il y a plusieurs approches possibles, mais la plus simple consiste à initialiser une variable – enfin on pourrait même s'en passer, mais c'est moins propre :transpi: – puis lui assigner le résultat de window.open() si elle n'est pas définie, sinon y changer sa page lorsque l'on appelle une fonction.

Donc en gros, tes liens restent inchangés, y compris le « target="_blank" » si tu tiens à ce que ça ouvre une nouvelle fenêtre dans le cas où le JavaScript ne serait pas activé sur le navigateur de l'utilisateur, et d'y rajouter l'appel à la fonction avec l'attribut onclick.

Côté JavaScript, ça pourrait donc ressembler à ça :

<script type="text/javascript">
   var onglet;
   fonction ouvrirLien() {
       if (onglet && !onglet.closed) {
           onglet.location = this.href;
       }
       else {
           onglet = window.open(this.href);
       }
       return false;
   }
</script>

Et côté liens HTML :

<a href="article1.html" target="_blank" onclick="ouvrirLien();">Article 1</a>
<a href="article2.html" target="_blank" onclick="ouvrirLien();">Article 2</a>
[...]

Je n'ai pas testé, mais normalement ça devrait marcher. Par contre il y a une situation où je ne sais pas trop ce qu'il risque de se passer, c'est si l'onglet est fermé entre temps... À mon avis ça risque de ne plus marcher et dans ce cas, il faudra rajouter une vérification pour la première condition. Je te laisse essayer. ;)

N'hésite pas si tu n'y arrives pas ou que tu veux quelques explications sur la fonction.

Lien vers le commentaire
Partager sur d’autres sites

Rho la honte... Ça se voit tant que ça que je n'utilise jamais l'attribut target ? :transpi:

Bon pour faire style, on va dire que ma solution à l'avantage de ne pas avoir recourt à un nom de fenêtre, ce qui peux faire bugger certains navigateurs quand une fenêtre du même nom existe déjà... :roll: Mais par contre, en utilisant target, ça a l'avantage de résister au changement ou au rafraîchissement de la page.

Donc la méthode 100 % HTML sera probablement la plus pratique, mais reste que la méthode JavaScript peut toujours servir dans le cas où le doctype utilisé n'accepte pas l'attribut target et que l'on souhaite respecter le standard malgré que l'on veuille ouvrir un nouvel onglet. :fumer:

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...