2005-09-20

XUL et les extensions Firefox

Les extensions du navigateur libre sont composées de fichiers XUL : apprenez à les manipuler en vue d'écrire votre première extension.

Une extension Firefox peut prendre toutes les formes et avoir toutes les fonctionnalités imaginables pour une application XUL classique. Pour y parvenir, il n'est pas toujours nécessaire de connaître XUL, mais quelques bases d'XML, de CSS et de JavaScript suffisent à faire des merveilles. Les extensions sont en effet simplement des fichiers XUL qui s'ajoutent à l'interface de Firefox.

Les fichiers.
La plus simple des extensions comprend certains fichiers-clefs, regroupés dans un fichier XPI. Ce dernier est tout simplement une archive des fichiers de l'extension, compressée au format zip. Le suffixe ".xpi" indique au navigateur qu'il peut ajouter l'extension à sa banque.

Les données trouvées dans le XPI sont, par défaut :
- /chrome/nomdelextension.jar : l'extension elle-même,
- /install.js : le fichier d'installation, en JavaScript pour Firefox pré-0.9 - de fait, n'est plus nécessaire aujourd'hui, selon les cas,
- /install.rdf : le fichier d'installation, en RDF pour Firefox 0.9 1.x.

Le fichier nomdelextesnion.jar est lui-même un fichier compressé au format zip, pouvant contenir toutes sortes d'éléments, dont :
- /content/nomdelextension : dossier contenant l'interface même de l'extension - fichiers XUL et JavaScript, description RDF...
- /skin/classic/nomdelextension : dossier contenant l'habillage de l'extension - fichiers PNG et CSS, description RDF...

Les fichiers RDF d'installation sont cruciaux : ils définissent les chemins d'accès des différents fichiers au sein du .jar (ou, plus précisément, du protocole chrome://). Le fichier équivalent JavaScript laisse plus les coudées franches, mais enregistre néanmoins les noms de l'auteur et de l'extension.

Le contenu du fichier JAR peut être aussi varié que l'extension elle-même. L'un des fichiers standard se nomme content.rdf, que l'on retrouve à la fois dans le dossier /content/nomdelextension et le dossier /skin/classic/nomdelextension. Dans les deux cas, il décrit les principaux fichiers de contenu ou d'habillage utilisés par l'extension.

D'autres types de données existent également, mais ne sont pas obligatoires : - chrome.manifest : indique l'emplacement des overlays, des fichiers de localisation et des habillages. Utilisé par Firefox 1.5+, remplace les fichiers content.rdf de Firefox 0.9+.
- /components : les composants XPCOM fournis par l'extension,
- /locale : les fichiers de localisation,
- /defaults : les fichiers par défaut.

...