Envoyé par : thamoz
Date : 05/08/2005 11:06
Bonjour,
Je travaille sur une application xulrunner.
Je croyais qu'en javascript les variables étaient locales au fichier. Apparemment non.
Prenons un fichier XUL1 avec deux iframes qui ouvrent le même fichier XUL2 (qui utilise le fichier de script scrip2.js), les deux fichiers XUL2 accèdent aux mêmes instances de variables de script2.js et se les partagent.
Est-il possible de faire en sorte que le fichier soit la portée d'une variable ? De telle sorte ques les deux ouvertures de fichies XUL2 ne pointent pas sur les mêmes instances de variables.
Si je comprends, toute variable déclarée en entête de fichier (var toto = "TOTO" par exemple) est globale à l'application ?
Merci,
Thamoz.
Envoyé par : laurentj
Date : 08/08/2005 13:34
Si je comprends, toute variable déclarée en entête de fichier (var toto = "TOTO" par exemple) est globale à l'application ?
non, elle est globale qu'à la page XUL qui inclus ce script. Elle n'est pas accessible par les autres fenêtres, que ce soit les fenêtres ouvertes par des window.open, ou celles contenues dans les <iframe>, <browser> etc..
Envoyé par : MehdiB
Date : 05/10/2006 10:27
Bonjour,
Cette discussion sur les variables m'interesse.. Est-il possible que différentes pages se partagent la même variable?C'est-à-dire que ma variable peut etre utilisée par mes différents fichiers .xul et .js? Comment dois-je la déclarer?
Merci d'avance
Envoyé par : Freud
Date : 05/10/2006 11:14
Si la valeur de la variable n'est pas vouée à changer, tu peux la déclarer dans un fichier de config JS.
var Config_Root_Appli = 'http://monserveur/monappli/'; var Config_base_url_check_identification = Config_Root_Appli+'services_web/modules/base/identification.php';
Tes fichiers XUL feront appel à ce fichier de config et les variables ainsi déclarée seront dispos.
Si la variable est plutôt dynamique, tu peux les passer via l'URL en GET et les récupérer ensuite dans ton fichier XUL.
Soit la page "fiche_societe.xul?id=367"
Soit la fonction function returnGet() { var tab_elts = new Array(); var temp = new Array(); var txt = "Valeurs en GET : \n"; var tmp = ''; var gets = new Array(); tmp = tmp+window.location; var temp2 = new Array(); var temp2 = tmp.split("?"); var requete = temp2[1]; var tab_paires = requete.split("&"); for(var i = 0; i < tab_paires.length; i++) { temp = tab_paires[i].split("="); tab_elts[i] = new Array(temp[0], unescape(temp[1])); } for(i = 0; i < tab_elts.length; i++) { // Mise en forme pour sortie de test // txt = txt+tab_elts[i][0]+" : "+tab_elts[i][1]+"\n"; gets[tab_elts[i][0]] = tab_elts[i][1]; } // alert(txt); return gets; }
Dans la page "fiche_societe.xul" tu peux donc récupérer les infos via
var gets = returnGet(); var recordid= gets['id'];
Il doit y avoir d'autres moyens mais je suis pas (encore) top niveau en JS... C'est ce que j'utilise actuellement pour un développement en XUL.
Freud
Envoyé par : MehdiB
Date : 05/10/2006 16:50
Je n'ai pas encore essayé mais je pense que ca résout mon problème!! Freud tu es génial! :) mais si ça marche pas je vais encore t'embeter un peu.
Encore merci!
Envoyé par : laurentj
Date : 06/10/2006 15:26
C'est un peu crade cette façon de passer des valeurs d'un écran à l'autre comme ça. Vous n'êtes pas en train de faire un site web, mais une interface utilisateur. Vous ne devriez pas à avoir faire ce genre de chose.
Envoyé par : Paul Rouget
Date : 06/10/2006 17:05
Ouais... ça dénote peut être un soucis de conception. Sinon... utilise un service (qui est un singleton).
Envoyé par : syl
Date : 06/10/2006 18:07
Je suis pas un specialiste mais il y a peut etre moins crade en utilisant le passage d'argument au moment de l'ouverture des fenetres (dans le cas d'une fenetre parent ouvrant une fenetre enfant) avec une fonction du style :
function aaAffiSelectVue() { var parm1 = document.getElementById("BC_themeactif").getAttribute("value"); var parm2 = document.getElementById("BC_themeactif").getAttribute("nom"); window.openDialog("chrome://aase/content/aaFormSelectVue.xul", "", "chrome, centerscreen, modal", parm1, parm2); }
On peut aussi acceder au DOM d'une autre fenetre en recupérant sa référence comme ceci :
// donne une reference d'une fenetre donnée function aaGetWindow(wintype) { var ww = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator); return ww.getMostRecentWindow(wintype); }
ou "wintype" est un type de fenetre personnalisé que l'on aura attribué au préalable Et la valeur retournée est un DOM document pouvant etre parcouru.
Envoyé par : MehdiB
Date : 07/10/2006 13:45
Il est vrai que c'est peut etre un mojns crade.. mais je vous rééxplique mon pb, j'ai une interface ou l'utilisateur doit entrer un login dont il veut chercher les informations sur un serveur LDAP. Une fois qu'il entre ce login et appuie sur "OK" je veux passer à la page suivante, écrire le login dans le champs adéquat et enfin remplir les autres champs texte par les informations recherchées.
voila,
Estèce que c'est faisable par la méthode que tu proposes syl? parcque je ne l'ai pas bien comprise
Envoyé par : syl
Date : 07/10/2006 15:27
Pour ma part, je réalise mon formulaire de login/pwd dans ma fenetre principale. Je joue avec les attributs XUL "collapsed" pour faire disparaitre ma boite de Login et faire apparaitre les controles de ma fenetre prinipale une fois l'identifiation correcte. Je n'ai donc pas à gérer plusieurs fenetres dans ce cas là C'est simple et rapide.
Pour ce qui est des fonctions précédentes : pour le passage de parametres à une fenetre : voir le tutoriel Travailler avec des fenêtres dans le chrome
Sinon la deuxieme fontion prend en parametre un windowType (sorte de titre de ta fenetre) et te retourne un objet ww que tu peux paroucourir via DOM du style :
montexte = ww.getElementById("MontexteBox").value;
Il n'est plus possible de poster des messages dans ce forum.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.