Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# surcharge de XULElement

Envoyé par : lucas

Date : 02/09/2005 18:15

Bonjour à tous.

Je souhaiterais rajouter des méthodes à un objet de type XULElement. Par exemple, un truc du style :

var id = document.getElementById("id");
id.toto()

où toto() est une méthode à moi. Est-ce possible ?

Merci.

# Re: surcharge de XULElement

Envoyé par : Utilisateur anonyme

Date : 03/09/2005 17:29

Tu peux ajouter des methodes à un élément XUL via XBL.

http://xulfr.org/xulplanet/xultu/xblmethods.html

# Re: surcharge de XULElement

Envoyé par : lucas

Date : 05/09/2005 10:20

Merci de ta réponse.

J'avais bien vu qu'on pouvait rajouter des méthodes via XBL. Cependant, je n'arrive pas à l'implémenter, étant donné que l'objet que je cherche à surcharger (de type XULElement) n'a pas de balise spécifique. Cela peut être un button, un tree, ou n'importe quoi d'autre.

Verrais-tu un moyen, via XBL, de surcharger *tous* les éléments XUL ?

Merci.

# Re: surcharge de XULElement

Envoyé par : laurentj

Date : 05/09/2005 13:22

XBL est assigné via css. Donc utilise les selecteurs css :-p

* { -moz-binding:url(...); }

Maintenant, utiliser XBL n'est pas forcément une bonne idée, puisque nombre de balise XUL sont déjà des XBLs. Donc si tu assignes ton propre binding à toutes les balises xul, elles perdront en majorité leurs fonctionnalités originelles.

À moins de surcharger tout les XBL en y ajoutant ta méthode, et en réécrivant la feuille de style xul.css (package toolkit.jar).

Le plus propre étant de modifier l'interface nsIDOMXulElement, et son implementation nsXulElement Mais bon, forcément, cela nécessite de compiler et redistribuer son propre firefox :-)

À part ça, c'est quoi la méthode que tu veux ajouter ?

# Re: surcharge de XULElement

Envoyé par : lucas

Date : 05/09/2005 14:00

XBL est assigné via css. Donc utilise les selecteurs css :-p

* { -moz-binding:url(...); }

Maintenant, utiliser XBL n'est pas forcément une bonne idée, puisque nombre de balise XUL sont déjà des XBLs. Donc si tu assignes ton propre binding à toutes les balises xul, elles perdront en majorité leurs fonctionnalités originelles.

En effet, j'avais déjà testé, et ce n'est pas une bonne solution.Je n'avais même plus le bouton qui me servait à lancer mon script ! :/

À moins de surcharger tout les XBL en y ajoutant ta méthode, et en réécrivant la feuille de style xul.css (package toolkit.jar).

Bof.

Le plus propre étant de modifier l'interface nsIDOMXulElement, et son implementation nsXulElement Mais bon, forcément, cela nécessite de compiler et redistribuer son propre firefox.

Bof, bof. Dur, et pas très perenne pour l'appli (cf XULRunner, évolution de Firefox...).

À part ça, c'est quoi la méthode que tu veux ajouter ?

Par exemple, une méthode du type hasParent(id), qui renvoie true si une balise parente de l'élément possède cet id. Ca tient en 3 lignes en javascript via une méthode globale, mais j'aurais voulu la rajouter directement aux éléments, pour avoir un code plus mieux...

Merci.

# Re: surcharge de XULElement

Envoyé par : laurentj

Date : 05/09/2005 16:11

Bon, aller, je te donne la solution que je viens de trouver :-)

En fait faut jouer avec les prototypes des objets javascript (le prototype étant l'objet contenant toutes les fonctions et propriétés d'un objet)

tu n'as donc qu'à faire :

 Element.prototype.mafonction = function (){  ...};

Element étant l'objet DOMElement dispo dans le javascript de Gecko... Et ouala...

# Re: surcharge de XULElement

Envoyé par : lucas

Date : 05/09/2005 16:30

Oui !

Vu que je n'arrivais pas à instancier un Element (ou XULElement) avec l'operateur new, je pensais naïvement qu'on ne pouvait pas utiliser de prototype. Mais si. Cool.

Merci.

# Re: surcharge de XULElement

Envoyé par : laurentj

Date : 06/09/2005 13:48

Vu que je n'arrivais pas à instancier un Element (ou XULElement) avec l'operateur new

Eh oui, parce qu'attention, en Javascript, tu n'as pas de classe. C'est ce qu'on appel de l'objet basé prototype.

En fait quand tu défini un objet en javascript, c'est une instance que tu crée implicitement. Et non un squelette (une classe) comme dans d'autres langages. L'operateur new fait en quelque sorte une copie de l'objet que tu indiques. Chacun des objets issues du même objet partageant les mêmes propriétés et méthodes via leur propriété prototype.

Ainsi donc, Element ou tout autre objet prédéfinis, ne sont pas de simples classes inertes, mais de vrais objets "vivants" :-)

 

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.