Question

dans les extensions de Firefox, il est encouragé pour les objets de votre poste à vivre dans les sous-objets comme com.contoso.myExtension. De cette façon, vous n'avez pas mettre des objets dans l'espace de noms global et les extensions restent généralement sur les cheveux de l'autre. (Au moins dans la fenêtre de browser.xul commun)

Mais d'après ce que je comprends à propos modules de code Javascript (JSMS) , est que même si la module lui-même travaille dans un espace de noms séparé, les symboles qu'elle exporte se retrouveront dans l'espace de nommage global de ce que les importations de code il. De plus, il est impossible pour une extension d'être « gentil » et essayer seulement de construire des sous-objets; ces symboles exportés seront simplement Whack variables globales tout existait déjà. vous pouvez aussi ne pas exporter un symbole comme com.contoso.myExtension. Il est seulement une variable globale simple.

Alors, quel est le protocole pour jouer bien lors de l'utilisation JSMS? Il suffit de faire des noms très variables à long et nous espérons qu'ils ne seront pas Collide?

Était-ce utile?

La solution

Tout d'abord, je n'ai pas vu un disque un vrai standard pour savoir comment gérer cela. Mais nous pouvons certainement faire beaucoup mieux que des longs noms de variables ...

Vous avez raison sur le vivant Modules du code Javascript dans une directive namespace (pour ainsi dire), mais lorsque vous les importez, vous ne devez pas les importer dans l'espace de noms global. Si vous regardez le Components.utils.import documentation, vous voyez que vous pouvez importer sur un champ spécifique. C'est, vous n'avez pas polluer l'espace de noms global du tout .

Vous pouvez récupérer vos modules dans un espace de noms myExtension.

var myExtension = {};
Components.utils.import("resource://.../module.jsm", myExtension);

Et enroulant ceci à l'intérieur d'une fonction d'auto-exécution ne permet pas de variables de fuite dans l'espace de noms global, même pas myExtension!

(function(){
    var myExtension = {};
    Components.utils.import("resource://.../module.jsm", myExtension);
})();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top