Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# [Résolu]Récupérer l'id d'un button

Envoyé par : Alain

Date : 27/05/2007 19:40

Bonjour,

Je débute en XUL/Javascript et j'ai le problème suivant : Je souhaite réaliser une interface de cédérom pour lancer des logiciels. La liste des logiciels se trouvent dans un fichier rdf (avec le nom de l'executable, une description, ...).

Voici le code XUL pour afficher la liste des logiciels, cela fonctionne bien :

<vbox id="categorie"  datasources="chrome://cdprof/content/logiciels.rdf" ref="http://www.cdprof.com/Maths">
<template>
 <vbox uri="rdf:*">
	<description value="rdf:http://www.cdprof.com/rdf#nom" class="h2"/>
	<description><textnode value="rdf:http://www.cdprof.com/rdf#description"/></description>
	<hbox>
	  <button id="rdf:http://www.cdprof.com/rdf#exec_installer" label="rdf:http://www.cdprof.com/rdf#exec_installer" disabled="rdf:http://www.cdprof.com/rdf#installer" oncommand="executer(this.id);"/>
	  <button label="Utiliser" disabled="rdf:http://www.cdprof.com/rdf#utiliser"/>
	  <button id="rdf:http://www.cdprof.com/rdf#lien" label="rdf:http://www.cdprof.com/rdf#lien" oncommand="afficher_site(2,this);"/>
	</hbox>
</vbox>
</template>
</vbox>

Le premier "button" doit m'exécuter le fichier dont l'executable est dans l'id de ce button. Pour le moment je me contente d'afficher cet id pour voir ce qui ne va pas. Je fais donc oncommand="executer(this.id)". Ce qui devrait m'afficher l'id, mais l'alert reste désespérément vide.

Voilà le javascript :

function executer(fichier){
alert(fichier);
var unFichier = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
var dossier_courant = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("CurProcD", Components.interfaces.nsILocalFile);
var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
var chemin=dossier_courant.path;
chemin=chemin.substring(0,chemin.indexOf("interface",0));
unFichier.initWithPath(chemin);
unFichier.appendRelativePath(fichier);
alert(unFichier.path);	
process.init(unFichier);
process.run(true,"",0);	

}

A noter que le même genre de manip fonctionne très bien ailleurs dans le programme. L'id est correctement affiché.

Si quelqu'un a une idée, je suis preneur. Je sèche depuis des heures.

A+ Alain

# Re: Récupérer l'id d'un button

Envoyé par : Christophe Charron

Date : 27/05/2007 21:23

1° question super bête :
ètes-vous sur de l'unicité de l'id ?
2° question super bête :
pourquoi ne pas faire

<button label="rdf:http://www.cdprof.com/rdf#exec_installer" disabled="rdf:http://www.cdprof.com/rdf#installer" oncommand="executer('rdf:http://www.cdprof.com/rdf#exec_installer');"/>

# Re: Récupérer l'id d'un button

Envoyé par : Alain

Date : 27/05/2007 21:44

Christophe Charron a écrit:

1° question super bête :

ètes-vous sur de l'unicité de l'id ?

Pas toujours. Mais j'utilise le même type de fonction ailleurs dans le code sur des id non uniques et cela fonctionne quand même.

2° question super bête :

pourquoi ne pas faire
<button
label="rdf:http://www.cdprof.com/rdf#exec_installe
r"
disabled="rdf:http://www.cdprof.com/rdf#installer"
oncommand="executer('rdf:http://www.cdprof.com/rdf
#exec_installer');"/>

C'est la première chose que j'ai essayé. Mais dans ce cas la fonction n'est pas exécuté du tout. Je n'ai pas l'impression que l'on puisse mettre du rdf dans l'argument d'une fonction javascript.

Allez, je retourne à mes tests.

Merci de m'avoir répondu,

A+ Alain

# Re: Récupérer l'id d'un button

Envoyé par : thefab

Date : 28/05/2007 14:12

A mon avis c'est possible de cette manière:

<button id="rdf:http://www.cdprof.com/rdf#exec_installer" oncommand="executer(this.id);"/>

Tu n'as pas besoin de réinterroger la source RDF puisque les rdf:* sont remplacés automatiquement tu peux donc les utiliser directement.

# Re: Récupérer l'id d'un button

Envoyé par : Alain

Date : 28/05/2007 15:07

Marche pas. Je n'y comprends rien. J'ai testé ta proposition ci-dessus et j'ai mis dans la fonction executer uniquement ceci pour tester :

function executer(fichier){
alert(fichier);
}

Et cela m'affiche une fenêtre vide ! Comme si l'id était vide. Pourtant si je met rdf:http://www.cdprof.com/rdf#exec_installer dans "label" pour vérifier que cette valeur n'est pas vide la bonne valeur apparaît. Donc le fichier rdf est correctement lu.

Si je lance la fonction avec executer(this.label) ça marche !! Mais je ne veux pas que le nom de l'executable soit dans le label.

Enfin j'ai vérifié, l'id est bien unique.

Bref, je sèche lamentablement !

A+ Alain

# Re: Récupérer l'id d'un button

Envoyé par : Christophe Charron

Date : 28/05/2007 15:12

et

<button toto="rdf:http://www.cdprof.com/rdf#exec_installer" oncommand="executer(this.toto);"/>

?

# Re: Récupérer l'id d'un button

Envoyé par : Alain

Date : 28/05/2007 15:32

Dans ce cas l'alert me met : undefined.

A-t-on le droit d'inventer des attributs qui n'existe pas ? J'ai aussi essayé avec tooltiptext, la aussi j'ai le message "undefined".

A+

Alain

# Re: Récupérer l'id d'un button

Envoyé par : Christophe Charron

Date : 28/05/2007 17:22

En fait, cela ne m'étonne pas. Je n'avais jamais utilisé this.toto Par contre, comme oui, on peut inventer des attributs qui n'existent pas, je cree souvent des "toto" dont je récupère la valeur par getAttribute("toto") et ça marche bien. Maintenant, quand à savoir si c'est bien raisonnable d'inventer des attributs, chacun sa morale ...

# Re: Récupérer l'id d'un button

Envoyé par : thefab

Date : 28/05/2007 21:11

Mais si tu fais:

<button label="rdf:http://www.cdprof.com/rdf#exec_installer"/>

ton bouton affiche bien le texte voulu ? Est-ce que ta source RDF est correcte ?

Et:

<button id="rdf:..." oncommand="alert(this.getAttribute('id'));"/>

ça donne quelque chose ? Est-ce que tu as des erreurs ?

# Re: Récupérer l'id d'un button

Envoyé par : Alain

Date : 28/05/2007 21:22

Oui le label s'affiche donc le rdf est correct. En fait j'ai trouvé une solution, je vous donne rapidement une explication, mais comme tout cela est encore très flou, je ne suis pas sur d'être très clair :-).

D'après ce que j'ai lu, les éléments qui sont dans un template ont un id qui est généré automatiquement avec la valeur de la ressource du rdf. Dans mon cas, je voulais lancer l'executable d'installation de zone alarm, donc la valeur de l'id était : http://www.cdprof.com/utilitaire/Zone Alarm alors que j'attendais zonealarm.exe

Bref, je passe maintenant cette valeur dans ma fonction. Et avec javascript je vais lire la valeur que je veux dans le rdf.

C'est magique XUL et compagnie, je fais des trucs sans même les comprendre :-). Mais j'espère bien comprendre un jour :-).

En tout cas merci pour votre aide.

A+ Alain

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.