Forums : Extensions

Aller à la discussion :  Plus récente Plus ancienne

# doublons de fonctions sur plusieurs extensions

Envoyé par : emri

Date : 10/03/2008 22:52

Bonjour,

Je développe actuellement ma deuxième extension XUL et je suis confronté à un problème. Lors de la création de ma première extensions, j'avais crée un fichier 'commons.js' qui contenait quelques helpers et classes bien pratiques que je prévoyais déjà communes à mes futures extensions.

Le problème est: lorsque j'appelle ma fonction 'print_r' dans ma deuxième extension, cela exécute la fonction de ma première extension.

Après quelques recherches sur internet, j'ai pu faire un rapprochement avec les espaces de noms (bien qu'étant totalement ignare à ce sujet).

Notamment sur notre cher XulFr dans les bonnes pratiques, il est conseillé d'ajouter des namespaces aux fonctions javascript.

Cette méthode n'est pas satisfaisante, car même avec ces namespaces, ces fonctions peuvent être dupliquées et se marcher les unes sur les autres (si l'on réutilise les mêmes fichiers dans plusieurs extensions).

Ce que je cherche, c'est à rendre indépendante les fonctions de mes différentes extensions. Il me semble que je pourrais rajouter un namespace nommant mon extension mais je perds grandement l'intérêt des helpers.

Ce problème soulève une autre question: Toutes les variables globales peuvent être potentiellement corrompues par une variable de nom identique dans une autre extension ?

Il doit bien y avoir un moyen pour éviter cela ?...

J'ai étudié longuement le fonctionnement de Firebug et j'ai trouvé ceci qui pourrait avoir un rapport, je suis malheureusement incapable de comprendre le sens de tout çà!

var FirebugLib = FBL = XPCOMUtils;

(function() {

var namespaces = [];

this.ns = function(fn)
{
    var ns = {};
    namespaces.push(fn, ns);
    return ns;
};

this.initialize = function()
{
    for (var i = 0; i < namespaces.length; i += 2)
    {
        var fn = namespaces[i];
        var ns = namespaces[i+1];
        fn.apply(ns);
    }
};

// [...]

}).apply(FirebugLib); 

Chaque classe est après définie ainsi (et ceci même pour la définition du module principal 'Firebug'):

FBL.ns(function() { with (FBL) {

const debug = true;

myClass = {
    attribute1: 'val1',
    attribute2: 'val1',
    method1: function ()    {}
    //....
}
}});

Pourriez vous m'aiguiller dans mes recherches et pourquoi pas m'expliquer le fonctionnement de ce bout de code ?

Merci :)

# Re: doublons de fonctions sur plusieurs extensions

Envoyé par : Paul Rouget

Date : 11/03/2008 04:10

emri a écrit:

Le problème est: lorsque j'appelle ma fonction
'print_r' dans ma deuxième extension, cela exécute
la fonction de ma première extension.

Je ne comprend pas. Ce n'est pas justement ce que tu cherches à faire ? Une sorte de toolkit réutilisable par d'autre extensions ?

Cette méthode n'est pas satisfaisante, car même
avec ces namespaces, ces fonctions peuvent être
dupliquées et se marcher les unes sur les autres
(si l'on réutilise les mêmes fichiers dans
plusieurs extensions).

Pourquoi ne pas faire une extension générique qui partage ces méthodes ? Ensuite, tu précises dans ton extension que tu dépends de cette extension. Un peu comme la JSLib.

P.S: rien à voir, mais je suis ravis de la qualité de ton post, ça change des derniers posts de certains qui sont illisbles.

# Re: doublons de fonctions sur plusieurs extensions

Envoyé par : emri

Date : 11/03/2008 16:07

''Merci de ce compliment ^^ (c'est tout de même la moindre des choses lorsque l'on veut un coup de main !)''

Effectivement je cherche à faire une sorte de toolkit réutilisable voire même plusieurs toolkits que je choisirais d'inclure en fonction des besoins de l'extension en cours. L'idée de créer une extension de 'lib' ne me plait pas trop, je trouve cela un peu lourd, vu le peu de fonctions que je vais y définir à présent.

J'en profite pour rappeler une des mes questions précédentes qui me parait importante :)

Ce problème soulève une autre question:
Toutes les variables globales peuvent être potentiellement corrompues >par une variable de nom identique dans une autre extension ?

Quant à ce petit bout de code (qui me taraude^^) issu de FireBug, vous auriez une idée, car j'ai comme l'impression qu'une solution se trouve dans cette direction...

J'essaierais de tester cette méthode sur mes 2 extensions à l'occasion...

Merci :)

# Re: doublons de fonctions sur plusieurs extensions

Envoyé par : Paul Rouget

Date : 11/03/2008 17:17

emri a écrit:

Effectivement je cherche à faire une sorte de
toolkit réutilisable voire même plusieurs toolkits
que je choisirais d'inclure en fonction des
besoins de l'extension en cours.
L'idée de créer une extension de 'lib' ne me plait
pas trop, je trouve cela un peu lourd, vu le peu
de fonctions que je vais y définir à présent.

Oui, je comprends.

J'en profite pour rappeler une des mes questions
précédentes qui me parait importante :)
>Ce problème soulève une autre question:
>__Toutes les variables globales peuvent être
potentiellement corrompues >par une variable de
nom identique dans une autre extension ?__

Oui, en effet, c'est possible. Il peut y avoir des conflits entre extensions.

Quant à ce petit bout de code (qui me taraude^^)
issu de FireBug, vous auriez une idée, car j'ai
comme l'impression qu'une solution se trouve dans
cette direction...

Un peu compliqué pour moi. Je te propose de lire ça: http://ejohn.org/blog/simple-class-insta(..) (Je ne sais pas si ça a un sens dans ton cas).

J'essaierais de tester cette méthode sur mes 2
extensions à l'occasion...

Merci :)

# Re: doublons de fonctions sur plusieurs extensions

Envoyé par : emri

Date : 11/03/2008 18:42

Oui, en effet, c'est possible. Il peut y avoir des conflits entre extensions.

C'est bien ce que je pensais, mieux vaut donc choisir des noms de variables de globales assez spécifiques.

Pour infos, ce tutoriel est vraiment excellent pour appréhender la poo en javascript.

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.