Mozilla/Firefox, via le composant xpcom mozilla.org/moz/jssubscript-loader;1, permet d'inclure un script javascript dans un autre script. Il faut faire comme ceci (Note : cela ne fonctionne pas dans les pages web, il faut que les deux scripts soient installés dans une extension) :

var loader =  Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
    .getService(Components.interfaces.mozIJSSubScriptLoader);

loader.loadSubScript("/chemin/vers/le/script/à/inclure");

C'est plutôt interressant. Si on met ça dans une petite fonction que l'on nomme au hasard, include, c'est encore mieux. Cela évite ainsi d'avoir à mettre un multitude de balise <script>, pour les gros projets.

Mais je viens de découvrir autre chose. Passons un objet javascript en deuxième paramètre :

var monObjet = new Object();
loader.loadSubScript("/chemin/vers/le/script/à/inclure", monObjet);

Toutes les fonctions et variables globales déclarées dans le script inclus, deviennent des méthodes et propriétés de l'objet qu'on a passé ! Ainsi, si dans /chemin/vers/le/script/à/inclure, j'ai :

 function test(){ alert("bouuu !"); }

Alors je peux faire

 monObjet.test();

Cette technique est utilisée par exemple dans Chatzilla, le client IRC de Mozilla. Celui-ci offre un moyen simple de développer des plugins permettant d'ajouter des fonctionnalités au logiciel. Un plugin se résume à un simple fichier javascript, devant contenir des fonctions avec des noms bien précis. Et pour déclarer le plugin, il suffit de mettre le fichier dans un répertoire spécifique, Chatzilla n'ayant plus qu'à l'inclure lors du démarrage, en passant un objet comme je l'ai montré. Si il ne passait pas cet objet, il y aurait des erreurs de redéfinition des fonctions au chargement de chaque plugin (puisqu'elles ont les mêmes noms d'un plugin à l'autre).

Bien sûr, une autre solution serait de définir dans le fichier du plugin, un objet implémentant une interface bien précise. Mais il faudrait alors, en plus de mettre le fichier du plugin au bon endroit dans chatzilla, instancier et déclarer cet objet auprés de chatzilla, en appelant une fonction de l'API du logiciel, qui serait par exemple registerPlugin(objetplugin) ou quelque chose comme cela.. Ce qui est moins "sexy" que la méthode ci-dessus :-)