Envoyé par : Vilya
Date : 30/04/2006 22:36
Bonsoir,
J'arrive au bout d'une première mouture de mon extension mais bien évidemment les vraies difficultés surviennent lorsqu'il faut tout remettre en ordre pour une distribution.
Je travaillais jusqu'à présent sur une installation un peu batarde dans laquelle j'appelais certains fichiers en local (pas dans le chrome donc). J'avais par exemple un fichier .RDF en local ("file://c:/...") dans lequel j'insérais et supprimais des entrées sans aucun problème.
J'ai tout passé en chrome et curieusement, si mes fonctions de lecture du RDF fonctionnent toujours, mes fonctions d'écriture non. J'ai retourné mon code dans tous les sens et je suis quasi persuadée de ne rien avoir oublié dans la transition.
Concrètement, avec mon rdf déclaré en chrome://monExt/content/myRDF.rdf :
<RDF:Description RDF:about="http://www.monsite.com/data" JOL:nom="Elessar" JOL:prenom="Vilya" />
Mon code :
var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService); var ds = rdfService.GetDataSourceBlocking("chrome://monExt/content/myRDF.rdf"); var subjectResource = rdfService.GetResource("http://www.monsite.com/data"); var predicateResource = rdfService.GetResource("http://www.monsite.com/rdf#prenom"); var target = ds.GetTarget(subjectResource, predicateResource, true); alert(target.Value);
renverra bien "Vilya"
Mais :
var rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService); var ds = rdfService.GetDataSourceBlocking("chrome://monExt/content/myRDF.rdf"); var subjectResource = rdfService.GetResource(http://www.monsite.com/data); var predicateResource = rdfService.GetResource(http://www.monsite.com/rdf#prenom); var oldValue = rdfService.GetLiteral("Vilya"); var newValue = rdfService.GetLiteral("Nenya"); ds.Change(subjectResource, predicateResource, oldValue, newValue);
ne modifiera rien du tout :/
J'explore les spec et le web depuis cette après midi et je fais choux blanc.
En espérant que vous ayiez une idée,
Vilya
Envoyé par : Vilya
Date : 01/05/2006 00:55
Une donnée supplémentaire si ça peut réveiller des souvenirs lointains chez certains ?
Sans changer une ligne de code, je copie juste mon RDF dans un répertoire local et je change le
var ds = rdfService.GetDataSourceBlocking("chrome://monExt/content/myRDF.rdf");
en
var ds = rdfService.GetDataSourceBlocking("file://c:/myPath/myRDF.rdf");
et ça marche... mais ne résout pas du tout mon problème.
J'avoue que là je suis perdue et bluffée.
Pourquoi est-ce que le fait d'appeler le RDF lorsqu'il est dans le chrome bloquerait l'écriture ? Ce qui m'étonne également c'est de n'avoir aucun log sur la console JS, le grand blanc :/
Envoyé par : Eric
Date : 01/05/2006 13:17
En effet, c'est un comportement normal.
Les chrome datasources sont readonly.
http://lxr.mozilla.org/seamonkey/source/(..)
Tu peux peut-être essayer en ajoutant la ligne
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite");
avant d'écrire dans la datasource mais je ne crois pas que cela va fonctionner.
Envoyé par : Vilya
Date : 01/05/2006 14:42
Merci Eric de confirmer mes doutes. Au moins ça m'évitera de continuer à chercher en vain.
Ce que je ne comprends pas bien alors c'est l'intérêt de travailler avec du RDF dans tout ça ? Typiquement, dans mon extension je peuple une liste à partir d'un rdf. Ce rdf est propre à chaque utilisateur donc stocké sur sa machine. Il a la main sur la liste et peut y rajouter ou supprimer des entrées. Pour une persistance de l'information (aka qu'il puisse retrouver la même liste à l'ouverture suivante de son navigateur) le plus intelligent me paraissait de manipuler le RDF. Ce qui n'est clairement pas possible quand ils sont dans le chrome.
Envoyé par : Eric
Date : 01/05/2006 16:52
Même si ta datasource est dans le chrome, tu peux la récupérer en utilisant un uri du type file://...
Regarde sur le site :
http://www.xulfr.org/wiki/RessourcesLibs(..)
Ca devrait résoudre ton problème.
Envoyé par : laurentj
Date : 02/05/2006 10:37
Euh, Vilya, je trouve tout à fait logique que l'on ne puisse pas modifier un fichier déclaré dans le chrome, surtout quand ledit fichier est situé dans un jar, car cela veut dire alors que tu modifie l'extension. C'est normal que l'on ne puisse pas modifier une archive (et puis quoi encore ?
Les données de l'utilisateur, on ne les mets pas dans une archive jar, on les stockes dans le profil. Donc à la première utilisation, tu copie le RDF stocké dans ton extension, dans le profil utilisateur (voir dans le wiki pour savoir récupérer le chemin du profil, pas de chemin en dur hein !!!), et ensuite, c'est sur ce fichier là que tu bosses, et non celui qui est dans l'extension..
Envoyé par : Vilya
Date : 02/05/2006 20:04
Dommage ça aurait été bien pratique mais effectivement pas très logique ;)
Moi qui pensait m'être débarassée du RDF j'ai visiblement pas encore tout vu, je m'en vais de ce pas mettre tout ça dans le profil utilisateur.
Merci encore pour vos conseils :)
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.