Navigation : Retour d'un accès plugin louche

Bonjour,

Démarrage d’une VM avec Jeedom Alpha 4.0.3.

Ce matin, j’ai vu passer un message disant que les scripts du plugin Script n’étaient pas grisés lors de leur désactivation.

  • J’ai regardé, chez moi, ils se grisent et dégrisent bien (thème light par défaut).

Mais du coup, j’ai remarqué un phénomène étrange.

  • Quand je vais dans un plugin (testé avec Script, Mail, Virtuel), et que clique sur un équipement, puis je me rend dans l’onglet [Commandes], je ne fais plus rien d’autre, que de presser le bouton « Retour » de ma souris (équivalent flèche retour / gauche du navigateur) alors je ne retourne pas sur le Dashboard.
  • Je reste dans l’équipement ouvert, dans l’onglet [Équipement]

Testé avec Edge / Chrome

Edit : Si je veux retourner sur le DashBord, il faut cliquer comme un malade sur retour et cela fini par arriver.
Donc, mon analyse me fait penser que la page se rafraichie quand je suis dessus et donc la touche retour me fait toujours retourner sur la même page.

Ca parait normal dans l’historique du browser tu a effectivement clique sur le lien pour ouvrir l’autre onglet.

Je viens d’éditer mon message (fin).

Dans ce cas précis, je reste dans le même onglet. En principe, je m’attends à retourner sur la page précédente, puis encore précédente (donc le Dashboard). Or, ce n’est pas le cas ! Je reste prisonnier de la page de l’équipement.
Stoulouch !

Salut
Le retour arrière merde sur jeedom mais le soucis c’est que je reproduis pas coup sur coup donc j’arrive pas a deboguer. Encore pire quand le problème se produit dans la barre d’URL j’ai bien celle de la page précédente mais chrome ne semble pas vouloir charger la page… Incompréhensible

Bonjour,

Partout où la navigation est dynamique via jQuery (i.e. sans rechargement de page, uniquement affichage/masquage de contenu déjà chargé), le navigateur ne peut pas connaitre l’opération arrière à faire sans le lui dire via l’API de manipulation de l’historique décrite ici.

Je l’ai fait dans le plugin jMQTT et ça marche bien (testé sur chrome/firefox/safari). Si tu es intéressé Loïc, je peux proposer un PR dans plugin.template.js. On parle de quelques lignes de code. Ça marchera dans tous les plugins.

Le faire dans tout Jeedom est bien plus ambitieux.

on tape déjà dedans après savesuccessfull …

Après perso, j’utilise plus l’interface que les bouton souris/browser back etc. à voir

Je parle de history.pushState et popState.
Après un savesuccessfull, on modifie l’URL et recharge la page. Ou alors j’ai pas compris ce que tu veux dire.

Ce serait pas mal de travail à mettre en place dans tout Jeedom versus la plus-value.

Oui moi aussi, la v4 l’utilise un peu déjà

Je pense aussi…

Pour le push je le fais déjà d’ailleurs ça confirme bien lors d’un back l’URL change bien dans le navigateur donc j’ai bien un push correcte sur l’historique.

@domotruc j’ai voulu regarder l’historique et j’avoue la je comprends pas trop. J’ai plusieurs soucis :

  • lors d’un changement du hash dans la barre de navigation ça me déclenche un event popState, donc retour arrière et donc tu cliques sur un onglet ca revient sur le précédent
  • dans mon traitement popState je test si event.state est null, si null je fais rien (je pense ca vient de la les soucis de non retour arrière, sauf que sans ca l’ajout ou mise à jour d’un hash me fait un retour arrière)

En soit les 2 soucis précédent sont pas les plus gênant, j’ai viré le hash dans l’url sur clic dans un onglet et rajouté un test sur l’event.

Mon plus gros soucis vient que dans l’historique du navigateur je me retrouve avec 200 fois la même url d’affilé (test simple sur la page scénario faut aller sur un scénario, puis retour au menu, puis aller sur un autre scénario et la l’historique est pourris). Pourtant je test si j’ai pas juste avant dans l’historique la meme url…

  if(!isset(_noPushHistory) || _noPushHistory == false) {
    try {
      if (_url.indexOf('#') != -1) {
        var hUrl = _url.substring(0, _url.indexOf('#'));
      } else {
        hUrl = _url;
      }
      if(PREVIOUS_PAGE == null || PREVIOUS_PAGE != hUrl){
        window.history.pushState('','', hUrl)
        PREVIOUS_PAGE = hUrl;
      }
    } catch(e) {
      
    }
  }

Si quelqu’un a une idée la je suis preneur.

Bonjour,
Peut-être en ajoutant un State Object:

window.history.pushState({urlPath:hUrl},'', hUrl)

?

J’ai compris mon soucis (au retour arrière je repassé sur la fonction qui faisait un insert dans l’historique).

J’ai poussé en alpha les corrections, donc ça sera bientôt en beta. A tester quand même j’ai fait pas mal de cas et pas vu de soucis.

1 « J'aime »

Bonsoir Loïc,
J’ai fait quelques essais (firefox et chrome sur Ubuntu), et je n’ai pas vu de problème, ça marche parfaitement, bravo !

1 « J'aime »

Bonjour,

Je ne constate plus le problème, ou plutôt cette situation.
Jeedom à jour du 20190521 à 07h30, Alpha.