IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Firefox : Donner focus à un autre onglet


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Par défaut Firefox : Donner focus à un autre onglet
    Bonjour,

    J'ai une application Web (Java + JSF) qui exploite l'utilisation des onglets de Firefox pour avoir plusieurs pages ouvertes en même temps, comme une application en mode multi-fenêtrage.
    Je précise qu'il ne s'agit pas d'une fenêtre qui ouvre d'autres fenêtres de type "popup".

    Depuis un onglet "Accueil", j'ouvre un nouvel onglet en soumettant un formulaire avec une propriété target "FENETRE2".
    Ce 2e onglet prend bien le focus, pas de soucis.

    Mais si ensuite je retourne sur l'onglet "Accueil", et que je resoumets le formulaire avec le même target, le 2e onglet se recharge bien, mais il ne prend pas le focus. C'est la mon problème

    Pour info, je soumets le formulaire grâce à une fonction JavaScript, car j'ai d'autres choses à faire à ce moment là.

    J'ai essayé plusieurs pistes, mais en vain.
    - sur le body de la page résultat : onLoad="self.focus();"
    - sur la page Accueil, dans la fonction de soumission du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // Ici je soumets le formulaire
    var fenetreCible = document.getElementsByName("FENETRE2")[0];
    fenetreCible.focus();
    - sur la page Accueil, dans la fonction de soumission du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Ici je soumets le formulaire
    FENETRE2.focus();
    - sur la page Accueil, dans la fonction de soumission du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var fenCible = window.open('','FENETRE2);   // Ouverture avec rien pour récupérer l'instance de la fenêtre
    // Ici je soumets le formulaire
    fenCible.focus();
    - J'ai aussi testé le bout de code Firefox qui se trouve ici, mais j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Exception... "'Permission refusée d'obtenir la propriété UnnamedClass.classes' when calling method: [nsIDOMEventListener::handleEvent]"  nsresult: "0x8057001e (NS_ERROR_XPC_JS_THREW_STRING)"  location: "<unknown>"  data: no] Line 0
    lors de l'exécution de la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
               .getService(Components.interfaces.nsIWindowMediator);

    Bref, je ne m'en sors pas...

    Quelqu'un aurait-il une idée sur la façon dont je pourrais régler mon problème ?
    Merci d'avance

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    J'aurais tenté un truc classique comme quand on utilise les popups car finalement, ce n'est pas très différent. Donc pour moi, la méthode qui a le plus de chances c'est un truc du genre de ce que tu as fais ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var fenCible = window.open('','FENETRE2');
    fenCible.focus();
    Mais ce qui m'ennuie avec cette méthode c'est qu'il semble que fenCible ne pointe pas sur une fenêtre du même nom ouverte avec un target. Essaie d'abord en faisant un window.open comme ci-dessus puis d'utiliser ton target. Vois si le JavaScript ouvre bien une nouvelle fenêtre qui est utilisée ensuite par le target. Ensuite, essaie le fenCible.focus() pour voir...

    EDIT : laisse tomber ce que j'ai dit, je dis de faire exactement ce que tu fais déjà... Fatigué, aujourd'hui...

  3. #3
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    J'ai reconnecté mes neurones et ils ont une question à te poser : comment fais-tu pour être sûr que tu vas ouvrir un nouvel onglet avec ton target et pas une nouvelle fenêtre ? C'est pour faire des tests de mon côté.

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Bonjour,
    Citation Envoyé par _Mac_ Voir le message
    J'ai reconnecté mes neurones et ils ont une question à te poser : comment fais-tu pour être sûr que tu vas ouvrir un nouvel onglet avec ton target et pas une nouvelle fenêtre ? C'est pour faire des tests de mon côté.
    Un nouvel onglet EST une nouvelle fenêtre.
    C'est juste une fonctionnalité du navigateur (et un choix de l'utilisateur) de le présenter sous la forme d'un nouvel onglet dans une même fenêtre (au sens de l'OS, cette fois)

    A+

  5. #5
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Oui, je sais bien ce qu'est un onglet. La question c'est de savoir si c'est ça s'ouvre dans un nouvel onglet par paramétrage de Firefox, par l'utilisation d'un plugin spécifique ou par l'utilisation des API JavaScript Mozilla, à défaut d'utiliser un plug-in. Donc dire que c'est on choix utilisateur, c'est faux, ça peut être un choix forcé de différentes façon.

    En gros, si ça passe par une extension ou un code JavaScript spécifique Firefox, pourquoi à ce moment-là ne pas passer par cette même extension (ou une autre) ou un code spécifique Firefox pour forcer le focus ? Si le but est de faire un truc 100% utilisation d'API JavaScript standard, la solution est loin d'être la même.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Par défaut
    Merci pour votre aide... et justement, je me faisais la réflexion à l'instant même : quand je fais un var maFenetre = window.open('uneUrl','unTarget'); et bien il m'ouvre un nouvel onglet et pas une fenêtre popup.
    C'est bien ce que je veux, mais je m'étonne de ce comportement. Je ne crois pas avoir dit à Firefox à un moment donné d'ouvrir les popups sous forme d'onglets

    D'autres idées ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Par défaut
    Oups, j'ai répondu en même temps que toi, Mac. Et donc pour répondre clairement : non je n'utilise aucune extension Firefox, ni code JavaScript particulier. Par contre, dans les différents frameworks que j'utilise, et qui embarquent pas mal de JavaScript, peut-être que certains modifient les comportements standards ?

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Par défaut
    Je viens de faire un test, avec une page HTML basique, sans JavaScript autre que le mien qui traine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <html>
    <body onLoad="window.open('http://www.google.fr','TEST');">
    Test
    </body>
    => Le comportement est le même : il m'ouvre un 2e onglet quand j'ouvre la page HTML.

    J'utilise Firfox 2.0.0.8. Est-ce le comportement par défaut ?

  9. #9
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    La question c'est de savoir si c'est ça s'ouvre dans un nouvel onglet par paramétrage de Firefox, par l'utilisation d'un plugin spécifique ou par l'utilisation des API JavaScript Mozilla, à défaut d'utiliser un plug-in. Donc dire que c'est on choix utilisateur, c'est faux, ça peut être un choix forcé de différentes façon.
    Firefox 2.0.0.8 :
    Menu Outils / Options / Onglets
    Les nouvelles pages doivent s'ouvrir dans :
    • Une nouvelle fenêtre
    • Un nouvel onglet
    C'est ce que j'appelle un "choix utilisateur"

    A+

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Par défaut
    Effectivement, j'ai l'option "dans un nouvel onglet" de cochée.

    Donc, j'ai refait un test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <html>
     
    <script language="Javascript">
    function test() {
       	var fenCible = window.open('http://www.yahoo.fr','TEST');
     
    	fenCible.focus();
     
    }
    </script>
     
    <body onLoad="window.open('http://www.google.fr','TEST');">
    Test...
    <input type="button" onClick="test();">
    </body>
    Avec l'option firefox "dans un nouvelle fenêtre" => Ca fonctionne bien. Il donne le focus à la fenêtre rechargée
    Avec l'option firefox "dans un nouvel onglet" => la méthode focus() ne fonctionne plus...

    Ca m'enuie sérieusement !! Je me demande si c'est le comportement normal, ou s'il y a une autre manière de procéder, ou si c'est un bug de Firefox...

  11. #11
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    essaye peut être de coller un setTimeout sur le focus ? le temps que firefox crée le nouvel onglet ???
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  12. #12
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    essaye peut être de coller un setTimeout sur le focus ? le temps que firefox crée le nouvel onglet ???
    J'en doute : self.focus() juste après le window.open() ne fonctionne pas non plus (dans la fenêtre mère)

    A+

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Par défaut
    Je viens de faire une triste découverte :
    - Quelqu'un qui a le même problème : http://groups.google.com/group/mozil...116dc87428d209
    - Le lien vers le bug dont il serait question : https://bugzilla.mozilla.org/show_bug.cgi?id=292314

    Ce bug date de 2005 ! S'il s'agit vraiment de mon problème, je ne suis pas prête d'avoir la solution !

  14. #14
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Citation Envoyé par marinew Voir le message
    http://groups.google.com/group/mozil...116dc87428d209
    - Le lien vers le bug dont il serait question : https://bugzilla.mozilla.org/show_bug.cgi?id=292314

    Ce bug date de 2005 ! S'il s'agit vraiment de mon problème, je ne suis pas prête d'avoir la solution !
    Hélas, ça y ressemble beaucoup

    A+

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Par défaut
    En tous cas, merci beaucoup pour votre aide rapide et active !!

  16. #16
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    Firefox 2.0.0.8 :
    Menu Outils / Options / Onglets
    C'est ce que j'appelle un "choix utilisateur"

    A+
    Je n'ai jamais dit le contraire. Admets simplement qu'il y a d'autres possibilités et que l'exposé du problème jusqu'à présent n'a pas permis (en tout cas ne m'a pas permis) de savoir exactement quelle était la façon réelle de procéder.

    Et justement, le fait que ce soit un choix utilisateur et pas un choix forcé doit amené notre ami(e) marinew à s'interroger : est-ce possible ou acceptable (d'un point de vue business ou fonctionnel, s'entend) que les fenêtres s'ouvrent dans des pops-up ou non ? Si ce n'est pas acceptable, comme faire pour forcer justement l'ouverture d'un onglet et pas d'une nouvelle fenêtre ?

  17. #17
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    entre celtiques ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Par défaut
    Encore un petit coup de main, SVP :

    J'ai une piste, pour contourner le problème, mais je n'ai pas la solution finale.

    L'idée part du constat que si je fais un window.alert('') sur l'évènement body onLoad de la 2e fenêtre, là il donne le focus à la 2e fenêtre, car elle sollicite l'utilisateur pour cliquer sur "OK".
    Ce qui m'embête, c'est que je ne voudrais pas que l'utilisateur ait à cliquer sur OK à chaque fois qu'il ouvre une fenêtre.
    Pensez-vous que ce soit une piste à creuser ? Comment pourrais-je déclencher un évènement de ce genre, mais sans la contrainte qui va avec ?

    Merci d'avance.

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Par défaut
    Une autre piste consisterait éventuellement à récupérer l'instance d'une fenêtre de même nom déjà ouverte, de la fermer, puis d'en ouvrir une nouvelle.

    => Savez-vous comment récupérer l'instance d'une fenêtre ouverte, autrement qu'au moment de l'ouverture (càd pas par la commande "maFen = window.open()") ?

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 79
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    Et justement, le fait que ce soit un choix utilisateur et pas un choix forcé doit amené notre ami(e) marinew à s'interroger : est-ce possible ou acceptable (d'un point de vue business ou fonctionnel, s'entend) que les fenêtres s'ouvrent dans des pops-up ou non ? Si ce n'est pas acceptable, comme faire pour forcer justement l'ouverture d'un onglet et pas d'une nouvelle fenêtre ?
    Heu... A priori, les utilisateurs souhaitent un fonctionnement par onglets, et pas par pop-up. Et vu que c'est le mode de fonctionnement par défaut ça tombe bien. D'autre part, je pense leur créer un profil Firefox dédié à l'utilisation de cette application. Donc ils pourront changer ce paramètre pour la navigation classique (avec un autre profil), sans ue ça n'interfère sur l'utilisation de l'application.

    Cela dit, si tu sais comment forcer l'ouverture par onglets, ça peut m'intéresser aussi.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Mettre le focus sur un autre onglet
    Par Jazz_ dans le forum VBA Access
    Réponses: 1
    Dernier message: 15/07/2010, 16h24
  2. empécher l'accès à d'autres onglets
    Par tibs dans le forum MFC
    Réponses: 3
    Dernier message: 08/03/2006, 19h44
  3. [C#][.Net 2.0] donner focus à Combobox, après click sur treeview
    Par Harry_polin dans le forum Windows Forms
    Réponses: 3
    Dernier message: 17/02/2006, 22h27
  4. Focus et autres complications
    Par masto dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 13/09/2005, 17h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo