11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Le problème posé :
Le problème global est la gestion d'un ensemble d'onglets tels que l'on n'ouvre pas (sauf action volontaire) à nouveau un document déjà ouvert.
Un fragment (élement) peut être défini comme cible dans l'url (toutes les pages utilisent une fonction mettant graphiquement en évidence un fragment (élément) ciblé. En général si l'on vise un nouveau fragment dans un onglet déja ouvert on active l'onglet et la nouvelle cible sera atteinte.

Bien, je sèche.

La solution élémentaire
Pour réouvrir des onglets déja ouverts à partir d'une même "famille d'onglets", j'utilise l'option "name" dans l'exécution de window.open(url,name,.. []).

Je teste et débogue d'abord avec chrome (Version 43.0.2357.130 m) puis avec Explorer et Firefox.

Le test en ligne de l'exemple de W3School ( adapté par mes soins pour la réouverture et les fragments) fonctionne très bien (y compris pour atteindre un fragment "anchor (ancre)".

Lorsque je fais tourner l'appli (lourde Wordpress avec beaucoup de plugins dont mes développements), j'obtiens un phénomène incongru :
1- l'activation ou l'ouverture de l'onglet défini par url et name se déroule normalement, mais
2- L'activation (ou la création) d'onglet est obtenu par un lien utilisant onclick. Mais l'exécution de window.open(url,name,.. []) lance aussi Smiley eek la mise à jour de l'onglet parent comme si on exécutait simultanément window.location(url) sur la même url. J'obtiens ainsi deux onglets identiques

Le code est simplissime
<a href="url" onclick="ActivateTab(url, name,..." >Aller à... </a>


et pour js :
function ActivateTab(url,name,...) { window.open(url,name) }


Je ne trouve pas de piste.
J'ai mis des points d'arrêts sur tous les points sensibles sans rien trouver.
Il est certain que le problème est lié au reste du code, mais en quoi ?

Cordialement

Trebly

Note :
1- clic exécute la fonction par défaut clic-droit offre les options du navigateur
2- Tous les onglets sont nommés
3- Test avec explorer 11 id°
4- Exemple W3School :
http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_win_open
<!DOCTYPE html>
<html>
<body>

<p>Click the button to open a new browser window.</p>

<a href="http://www.w3schools.com#test3" onclick="myFunction()">Try it</a> 
<!-- button ou a =dito -->

<script>
function myFunction() {
    window.open("http://www.w3schools.com#test3","w3s3"); /* Ajouter un id="test3" dans l'url avec le deboguer */
}
</script>

</body>
</html>

Modifié par Trebly (02 Jul 2015 - 19:39)
Bonsoir,

Le fait de rédiger force l'auteur à une réflexion qui assez souvent mène à la solution.

En fait il faut arrêter l'action et pour cela il faut que onclick se termine par "return false;"

Sans le "return false;" l'exécution continue et le href est exécuté par défaut avec target="_self".

Ceci étant le sujet de la gestion par une application de ses onglets ou fenêtres avec une relation opener ou parent sans réouverture des url déjà ouvertes est une question globale qui mériterait un tuto. C'est pour cela que je laisse le sujet non résolu quoique la question a l'origine du sujet le soit.

Cordialement

Trebly
Obliger l'utilisateur à une organisation particulière d'onglets et de fenêtres dictée par les concepteurs est généralement une mauvaise pratique.
Chacun s'organise différemment dans son travail et doit pouvoir le faire comme il l'entend, au risque selon les cas de traiter les concepteurs de noms d'oiseaux ou de quitter le site.

Il n'y a rien de plus énervant que forcer l'utilisateur à ouvrir un nouvel onglet quand il ne le souhaite pas, ou l'inverse, l'obliger à rester dans le même onglet alors qu'il souhaiterait en nouvrir un nouveau.
Le pire scénario étant exactement ce que vous cherchez à faire, remplacer un onglet par un autre sans avertissement.

S'il n'y a pas de tutoriel, c'est donc pour une très bonne raison.