Envoyé par : SpeedFranck
Date : 27/01/2006 14:27
Bonjour,
Je cherche à utiliser des données persistantes via l'attribut "persist".
Le pb est que les pages xul que j'appelle recoivent des paramètres comme le numéro de session par exemple. Ce qui donne des urls de ce genre :
chrome://appli/content/fichier.xul?session=1136454257630
Or c'est l'url entière qui est enregistrée dans le fichier localstore.rdf (profil de firefox) et qui sert donc d'identifiant à firefox pour retrouver les champs persistants.
Lorsque la session change, le système est alors incapable de retrouver mes données persistantes. Donc gros souci.
Si quelqu'un a une idée pour éviter ou contourner le pb...
D'avance merci
Envoyé par : laurentj
Date : 27/01/2006 15:13
Effectivement, je pense que ce n'est pas une bonne idée de passer des données via l'url comme ça.
Tu peux stocker cette information de session dans les prefs (que tu efface lorsque tu quitte l'appli par exemple).
Il y a aussi les objets properties ou persistentproperties qui permettent apparement de stocker des propriétés. Je n'ai jamais utilisé mais je pense que ça peut t'aider. Tu les appelles en getService (et non createInstance) pour avoir toujours la même instance.
Ou encore mieux, tu te fais ton propre composant XPCOM (en js ça suffit), appelé par getService, avec l'interface que tu veux (genre tu te fais des méthodes setSession, getSession etc...)
Envoyé par : SpeedFranck
Date : 27/01/2006 15:27
Le souci c'est qu'il n'y a pas que les sessions qui sont transmises via des paramètres... de manière générale, j'ai en réalité en moyenne 4-5 arguments et plus... :-(
Envoyé par : laurentj
Date : 27/01/2006 15:42
je ne vois pas en quoi c'est un souci. au lieu de stocker juste la session dans les prefs ou l'objet properties, tu stockes aussi tes autres paramètres.
je viens de penser aussi à un truc, c'est que tu peux passer des paramètre à une fenêtre sans passer par l'url, en les mettant dans un objet :
var parametres = { session:"123", foo:"bar",...} window.openDialog("chrome://...", "foo", "features ...", parametres);
et ensuite dans la fenêtre tu les recupère par
window.arguments[0].session window.arguments[0].foo
Envoyé par : SpeedFranck
Date : 27/01/2006 15:50
oui effectivement, on pourrait faire comme ca, mais cela est valable pour des fenetres de dialogue, mais comment faire lorsqu'on change de page via une instruction "window.location=chrome...xul" ?
Envoyé par : laurentj
Date : 27/01/2006 16:39
honnetement, je ne pense pas que ce soit une bonne idée de changer de page comme ça. Ce n'est pas une application web que tu fais. Je ne connais pas de logiciels qui décident d'un coup de modifier toute son interface utilisateur
M'enfin, si tu y tiens, il faut passer par les prefs ou les objets XPCOM comme je t'ai dis. Ainsi tu stocke tes données quelque part en mémoire.
Envoyé par : SpeedFranck
Date : 27/01/2006 17:37
j'avoue ne pas trés bien comprendre ta remarque ci-dessous,
je ne connais pas de logiciels qui décident d'un coup de modifier toute son interface utilisateur
apparemment il n'y a pas que moi qui utilise des url chrome avec paramètres, voici un bout de code tiré des cahiers du programmeur xul (de jonathan Protzenko) :
function passerPageSuivante() { if (gConfig.url != null) { var url = "chrome://xulforum/content/index.xul?config="+gConfig.url+"&phpsessname="+gPhpSessName+"&phpsessid="+gPhpSessId+"&auteur="+document.getElementById("xf-ident-ident_nom").value; setTimeout(function() { document.location.href=encodeURI(url); }, 500); /* on délaie pour éviter que les résultats de la première recherche LDAP retombent sur la page suivante, ça arrive */ } else { ajouterErreur(gStringBundle.getString("confInvalide")); } }
enfin du coup j'espere ne pas etre totalement dans l'erreur ;-) surtout aprés deux ans de programmation sur l'appli...
Envoyé par : laurentj
Date : 27/01/2006 18:21
Que ce soit dans le livre ou pas, il en reste pas moins que je ne ferais pas comme ça. (et c'est pas comme ça que font les dev de Firefox ou de Thunderbird ;-) ). Jonathan a montré une façon de faire. Ça veut pas dire que ce soit la meilleure (il a peut être utilisé cette méthode pour que son tuto soit plus facilement appréhendable, pour pas avoir à expliquer les XPCOM en même temps etc.) Cette méthode, comme tu l'as toi même constaté, a ses limites.
Ce n'est pas une application web que tu fais. C'est un logiciel. Donc ne te restreint pas aux urls, utilise tous les moyens que tu as à ta disposition.
Les paramètres d'une fenêtre devraient se passer autrement comme je l'ai dit. D'ailleurs, parle-t-on bien ici de paramètre à une fenêtre ? Parce qu'un id de session, à priori, il est global à ton logiciel. Donc ce n'est pas un paramètre, c'est une variable globale à ton logiciel. Donc cette donnée doit être stockée dans un objet global à ton appli, dans un endroit accessible par toutes tes fenêtres. C'est plutôt lourdingue je trouve que de passer ces données à chaque écran via l'url. Surtout que par ce moyen, tu te limite au type chaine. Alors que si tu avais un objet "service" centralisant les données globales de ton appli :
var DataService = Components.classes["ma_centrale_de_donnee"] .getService(Components.interfaces.nsIMaCentraleDeDonnee); var session = DataService.session; // stockage du login qui servira ailleurs DataService.login = document.getElementById("champsLogin").value // etc...
Pour finir, ce n''est pas vraiment difficile de faire un XPCom en javascript. C'est quasi du copier coller avec les tutos que tu peux trouver (dans notament le bouquin Creating Application With Mozilla). Et si ça te rebute d'en faire un, tu peux en utiliser un qui est tout pret, comme properties (même si au niveau type de donnée, tu es forcément limité)
Envoyé par : hhf
Date : 27/01/2006 22:35
je suis encore d'accord avec laurentj, (decidement, je suis un gros leche botte), pour ton application, tu devrais plutot faire des decks contenant tous tes ecrans, puis tu bascule les vues en fonction de l'affichage desiré, ca demande plus de rigueur au niveau du code javascript (car les pages ne sont jamais rechargées), mais au final tu y gagne. tu mutualises tes objets, ainsi partagé et accessible par toute tes pages en meme temps. tu peuples tes interfaces via des AJAXs ou des RDFs, tu separes ainsi totalement les données des interfaces. Souvenons nous que XUL est à l'interface ce que HTML est à la presentation, mais le shema J2E n'est pas adapté à un client riche, donc pas d'interface avec des données à l'interieur cas typique d'une JSP.
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.