Project

General

Profile

Anomalie #22552

NG : la zone "applications ouvertes" ne fonctionne pas sous Firefox

Added by Renaud Dussol over 6 years ago. Updated about 6 years ago.

Status:
Fermé
Priority:
Normal
Assigned To:
Target version:
Start date:
12/20/2017
Due date:
% Done:

100%

Distribution:

Description

Sur le xdesktop, une zone fort sympathique nous permet de voir les applications actuellement ouvertes.
Pour le passage au dispatcher NG, ayant fait presque tous mes tests sous Firefox, j'avais remarqué que sur les templates base x3,cette zone avait disparu
Quelle ne fut pas ma surprise lorsque, après les premiers tests utilisateurs, j'eus la surprise de constater que certains d'entre eux faisaient des remarques sur cette zone dont j'ignorais l'existence !

Il apparaît donc que cette zone existe bien, mais fonctionne sous chrome et pas Firefox. Je comptais faire une demande d'évolution pour demander le retour de cette zone, finalement c'est un signalement d'anomalie.
D'autre part, et c'est un détail : cette zone affiche "Dernières applications utilisées" alors que visiblement ce sont les applications actuellement ouvertes. Mais j'imagine que cela peut se régler facilement

Je vais chercher un peu de mon côté, j'update la demande au fur et à mesure de mes découvertes

Associated revisions

Revision 7ae50a3b (diff)
Added by Christophe LEON over 6 years ago

ref #22552 : zone "applications ouvertes" sous Firefox

History

#1 Updated by Christophe LEON over 6 years ago

Je n'ai pas de solution à cette problématique

dans le composant edispatcher-applications/edispatcher-applications-opened.html
On accepte d'afficher les applis ouvertes que si c'est Chrome

Sous firefox lorsque le focus est remis sur un handle de window ce dernier ne passe pas au premier plan. Je n'ai pas trouvé de solution si tu en a une je suis preneur

Cdlt,
Christophe

#2 Updated by Renaud Dussol over 6 years ago

  • Tracker changed from Demande to Anomalie

#3 Updated by Renaud Dussol over 6 years ago

En tout état de cause, il faut renommer cette zone "Applications ouvertes" ou "Applications actuellement ouvertes" car ce ne sont pas les "Dernières applications utilisées"

#4 Updated by Renaud Dussol over 6 years ago

Il y a peut-être une solution, qui consisterait à forcer l'ouverture des apps en fenêtre modale dans FF
En effet, le focus sur un onglet ouvert ne fonctionne pas, mais le focus sur une fenêtre modale semble fonctionner
Donc si on force l'ouverture en fenêtre modale dans FF, on pourrait obtenir une solution acceptable.
Reste à voir l'impact utilisateur d'une ouverture fenêtre par rapport à l'ouverture onglet (d'autant que les fenetres modales sont "spéciales")

#5 Updated by Renaud Dussol over 6 years ago

Dans ng/public/elements/behaviors/scripts/classes.js

/*
 if ( this.wnd && (typeof browser  != "string" || browser.indexOf("chrome") == -1) ) {
    console.log("FOCUS MAY NOT BE AVAILABLE")
    this.wndIgnore = true
    this.wnd.close();
    this.wnd = false;
    name = "_blank" 
  }
*/
  if (this.wnd) {
      console.log(this.wnd);
      this.wnd.focus();
  } else {
      if (typeof browser  != "string" || browser.indexOf("chrome") == -1) {
        this.wnd = window.open(this.getUrl(),name,"modal=yes");
      }
      else {
          this.wnd = window.open(this.getUrl(),name);
      }

#6 Updated by Renaud Dussol over 6 years ago

Tester si sur FF on peut laisser la zone mais en la rendant non-cliquable

#7 Updated by Renaud Dussol over 6 years ago

  • Assigned To changed from Christophe LEON to Renaud Dussol

#8 Updated by Renaud Dussol over 6 years ago

Solution choisie pour Nice : sous Firefox on fait afficher la zone mais non-cliquable (comme sur Xdesktop en fait, ainsi les utilisateurs sont habitués à ce comportement)
Je regarderai pour modifier le code en conséquence, mais il faudra voir ensemble si à la Réunion vous souhaitez conserver la zone entièrement masquée sous FF

#9 Updated by Renaud Dussol over 6 years ago

En fait du coup le code est très simple
Dans classes.js :

 if (this.wnd) {
       this.wnd.focus();
  } else  {
     this.wnd = window.open(this.getUrl(),name);
  }

Comme le focus ne fonctionne pas sous FF, on a le comportement "attendu" : on clique mais rien ne se passe
Ensuite c'est juste une question de CSS, pour rendre la zone non-cliquable sous FF, je pense que cela peut se faire au niveau du template en CSS. (Je l'ai fait pour les zones réseau, mais non-dépendant du navigateur)
Il faut juste combiner nos codes pour que cette partie soit masquée à la Réunion et visible à Nice
Je me souviens avoir modifié un js pour rendre la zone visible au départ mais je ne l'ai pas noté et je ne me souviens plus ou c'est...

#10 Updated by Renaud Dussol over 6 years ago

Un petit avantage avec ce code aussi : si un jour le focus fonctionne sous FF, cela marchera direct

#11 Updated by Renaud Dussol over 6 years ago

Pour pouvoir désactiver le clic au niveau du template il faut détecter le navigateur directement dans le template
La fonction getBrowser() est présente dans ng/public/elements/behaviors/scripts/utils.js
Y a-t-il un risque quelconque a exposer ce fichier en le chargeant dans le template ?
Si oui il faut redéclarer la fonction dans le template (ou en faire une autre)

Autre question : le comportement a-t-il été testé sur d'autres navigateurs (Safari/MacOS, Opera...)
Ou formulé autrement : faut-il le permettre uniquement sous chrome ou l'interdire uniquement sous Firefox ?

#12 Updated by Renaud Dussol over 6 years ago

Les 2 dernières questions sont liées : en effet un moyen très simple de détecter chrome est de tester la présence des objets chrome et chrome.webstore (a priori + fiable que le navigator.userAgent de js)

ainsi on peut utiliser une seule variable isChrome :

var isChrome = !!window.chrome && !!window.chrome.webstore;

et le tour est joué
Si on veut que ça fonctionne dans d'autres navigateurs, il faut utiliser une fonction plus élaborée

#13 Updated by Renaud Dussol over 6 years ago

  • % Done changed from 0 to 80

J'ai retrouvé c'est dans l'élément edispatcher-applications-opened

ng/public/elements/edispatcher-ressources/edispatcher-applications-opened.html

j'ai commenté la condition l.55 :
// if (isChrome()) {
(je suppose que ce isChrome vient du utils.php car ce n'est pas celui que j'ai utilisé dans mon template)

Si on souhaite conserver le masquage complet à la Réunion, il faudrait mettre cette condition au niveau du template, donc la supprimer de ce fichier

Dans mon template actuellement j'ai ajouté :

    var isChrome = !!window.chrome && !!window.chrome.webstore;

    if (!isChrome) {
         $("edispatcher-applications-opened").css("pointer-events", "none");
    }

Mais si l'on souhaite le masquer complètement on peut utiliser :

    if (!isChrome) {
         $("edispatcher-applications-opened").css("display", "none");
    }

Je pense que cela règle tous les problèmes

Fichiers à modifier :
- ng/public/elements/edispatcher-ressources/edispatcher-applications-opened.html (enlever la condition sur Chrome)
- ng/public/elements/behaviors/scripts/classes.js (supprimer les conditions de navigateur, cf. code plus haut)
- Le reste se règle au niveau du template : soit on masque l'élément, soit on désactive le clic

J'attends quand même ta validation avant de commiter

#14 Updated by Renaud Dussol over 6 years ago

Validation OK sur principe
Je commite

#15 Updated by Renaud Dussol over 6 years ago

  • Status changed from Nouveau to Résolu
  • % Done changed from 80 to 100

#16 Updated by Christophe LEON about 6 years ago

  • Target version set to Envole 5.8

#17 Updated by Arnaud FORNEROT about 6 years ago

  • Status changed from Résolu to Fermé

Also available in: Atom PDF