Conversion des extensions vers Firefox 1.0
Ce document va tenter d’expliquer par des exemples comment utiliser la nouvelle gestion des API mise en place depuis Firefox 0.9 (et donc pour la version 1.0) telle que définie par Ben Goodger pour les extensions à venir.
Rédigé par Alain B le 6 juin 2004
Mis à jour par Geckozone (version 1.0 - nov. 2004)
Page originale - Jed Brown (traduite avec son accord)
Bien que son sujet principal soit la conversion des extensions compatibles 0.8 vers la nouvelle API, cet article sera également utile pour quiconque souhaite créer une extension pour Firefox.
1) La nouvelle API : présentation rapide
Dans Firefox 0.8 et Thunderbird 0.6, les extensions étaient listées et affichées dans le panneau des options comme indiqué sur la figure 1, tandis que le nouveau gestionnaire d’extensions a sa propre fenêtre comme indiqué sur la figure 2.

- Figure 1

- Figure 2
Notez que le nouveau gestionnaire d’extensions permet des icônes personnalisées pour chaque extension, des liens pour une page d’accueil et d’information, et offre de nouvelles fonctions telles que la désinstallation et les mises à jour.
2) La structure des XPI
La structure actuelle et ancienne était similaire à ceci :
extension.xpi
install.js
extension.jar
extension.dll
La nouvelle structure est décrite comme suit :
extension.xpi
install.rdf
chrome/extension.jar
components/extension.dll
components/extension.js
defaults/extension.something
defaults/preferences/extension.js
Par exemple, l’extension quicknote a la structure suivante :
quicknote.xpi
install.js
quicknote.jar
Maintenant, avec la nouvelle API, le fichier .jar devra être dans un répertoire chrome et un nouveau fichier install.rdf devra être créé :
quicknote.xpi :
install.rdf
chrome/quicknote.jar
3) Le fichier RDF install.rdf
NdT : Yan Morin propose un générateur d’install.rdf en français, lisez la suite pour le créer manuellement
Le nouveau fichier install.rdf a été officiellement décrit par Ben Goodger sur sa page concernant les extensions pour Firefox/Thunderbird. Vous trouverez ci-dessous une description s’efforçant de préciser au mieux chaque balise et sa fonction.
Les champs nécessaires :
Comme nous décrivons un fichier XML, nous devons déclarer en premier ce qui suit :
<?xml version="1.0"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#">
.................
</RDF>
A l’intérieur de la balise RDF, nous devons définir la description de notre extension.
<Description about="urn:mozilla:install-manifest">
......
</Description>
A l’intérieur de la balise description commence les choses sérieuses :
<em:id>{657DDE38-D0B3-4f8a-BF9F-023A6C29119B}</em:id> // GUID, Vous devez en générer un pour votre extension, c'est un identifiant unique.
<em:name>QuickNote</em:name> // Le nom de votre extension
<em:version>0.5.9</em:version> // Le numéro de version actuelle
<em:description>A note taking extension with advanced features Includes required JSlib from May23rd.</em:description> // Une bonne description
<em:creator>Jed Brown</em:creator> // Noms des auteurs
<em:contributor>Nickolay Ponomarev.</em:contributor> // Contributeurs optionnels (un ou plusieurs)
<em:homepageURL>http://quicknote.mozdev.org/</em:homepageURL> // Page Web de l'extension
<em:optionsURL>chrome://quicknote/content/qnsettings.xul</em:optionsURL> // Lien optionnel vers une fenêtre d'options
<em:aboutURL>chrome://quicknote/content/about.xul</em:aboutURL> // Lien optionnel vers une fenêtre d'informations (voir ci dessous)
<em:iconURL>chrome://quicknote/skin/qntoolbar.png</em:iconURL> // Une icône pour identifier votre extension
<em:updateURL>http://jedbrown.net/dev/Mozilla/QNupdate.rdf</em:updateURL> // Fichier optionnel pour les mises à jour (voir la documentation officielle)
Si vous ne mettez pas de balise optionnelle <em:aboutURL>, le gestionnaire d’extensions créera sa propre fenêtre d’informations à partir des données ci-dessus (figure 3),
ou vous pouvez la personnaliser comme celle de l’extension quicknote (figure 4)

- Figure 3

- Figure 4
Ensuite, vous devez spécifier le nom de vos fichiers .jar, les thèmes graphiques et les fichiers de localisation [1] que vous utilisez.
<em:file>
<Description about="urn:mozilla:extension:file:quicknote.jar"> // Assurez vous que chrome/extension.jar est écrit correctement
<em:package>content/</em:package> // L'emplacement des fichiers XUL/JS (quicknote.jar > content > quicknote.xul)
<em:skin>skin/classic/</em:skin> // L'emplacement des thèmes graphiques (quicknote.jar > skin > classic > quicknote.css)
<em:locale>locale/en-US/quicknote/</em:locale> // L'emplacement des fichiers de localisation linguistique (quicknote.jar > locale > en-US > quicknote > quicknote.dtd
</Description>
</em:file>
Enfin, nous devons indiquer pour quelles applications (Firefox, Thunderbird, etc.) notre extension est dédiée, et avec quelle version de ces applications elle fonctionne.
<em:targetApplication> // Vous devez mettre une balise pour chaque application compatible
<Description>
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id> // Ceci est l'identifiant unique de Firefox
<em:minVersion>0.7</em:minVersion> // L'extension quicknote fonctionne pour Firefox 0.7 à 0.9
<em:maxVersion>0.9</em:maxVersion> // NdT : avec Firefox 1.0, la valeur serait maintenant 1.0 ou 1.0+
</Description>
</em:targetApplication>
Voici à quoi devrait ressembler toutes les balises décrites, cet exemple peut vous servir de modèle pour votre propre extension :
install.rdf
<?xml version="1.0"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#">
<Description about="urn:mozilla:install-manifest">
<em:id>{657DDE38-D0B3-4f8a-BF9F-023A6C29119B}</em:id>
<em:name>QuickNote</em:name>
<em:version>0.5.9</em:version>
<em:description>A note taking extension with advanced features Includes required JSlib from May23rd.</em:description>
<em:creator>Jed Brown</em:creator>
<em:contributor>Nickolay Ponomarev</em:contributor>
<em:homepageURL>http://quicknote.mozdev.org/</em:homepageURL>
<em:optionsURL>chrome://quicknote/content/qnsettings.xul</em:optionsURL>
<em:aboutURL>chrome://quicknote/content/about.xul</em:aboutURL>
<em:iconURL>chrome://quicknote/skin/qntoolbar.png</em:iconURL>
<em:updateURL>http://jedbrown.net/dev/Mozilla/QNupdate.rdf</em:updateURL>
<em:file>
<Description about="urn:mozilla:extension:file:quicknote.jar">
<em:package>content/</em:package>
<em:skin>skin/classic/</em:skin>
<em:locale>locale/en-US/quicknote/</em:locale>
</Description>
</em:file>
<em:targetApplication>
<Description>
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
<em:minVersion>0.7+</em:minVersion>
<em:maxVersion>0.9</em:maxVersion>
</Description>
</em:targetApplication>
</Description>
</RDF>
4) Conservation d’une compatibilité avec la suite Mozilla et les versions antérieures
La conservation de la compatibilité avec des versions antérieures de Firefox/Thunderbird ou avec la suite Mozilla est très facile. Utilisez simplement votre fichier originel install.js et repérez où les fichiers extensions.jar sont ajoutés, c’est à dire par l’appel de la fonction addFile()
Exemples de ce que vous devez trouver :
addFile(auteur, version, fichierJar, répertoire, null);
ou
addFile('Jed Brown', '0.5.9', 'quicknote.jar', getFolder('Profile', 'chrome'), null);
Nous devons dire à l’application que le fichier jar à ajouter est situé dans un sous-répertoire chrome. Pour cette opération, nous devons modifier les lignes ci-dessus comme ceci :
addFile(auteur, version, 'chrome/' + fichierJar, répertoire, null);
ou
addFile('Jed Brown', '0.5.9', 'chrome/' + 'quicknote.jar', getFolder('Profile', 'chrome'), null);
Maintenant, la structure de votre extension xpi devrait ressembler à ceci :
extension.xpi
install.rdf
install.js
chrome/extension.jar
C’est tout ! Votre extension devrait maintenant être prête pour le gestionnaire d’extensions. Dans ce cas, Firefox 0.9 et les versions suivantes (et les futures versions de Thunderbird) ignoreront le fichier install.js et n’appliqueront que ce qui est valide dans le fichier install.rdf, tandis que les anciennes versions de Firefox/Thunderbird et de la suite Mozilla ignoreront le fichier install.rdf et utiliseront seulement le fichier install.js.
Vous pouvez consulter les fichiers install.js et install.rdf sur la page Web mozdev de quicknote.
5) Le fichier update.rdf (mise à jour de version)
Le nouveau gestionnaire d’extensions permettra à Firefox/Thunderbird de détecter automatiquement une nouvelle version de votre extension lorsqu’elle est disponible. Cette mise à jour s’effectue de deux manières :
- Si votre extension est hébergée sur update.mozilla.org, tout sera pris en charge automatiquement à chaque fois que vous y soumettrez une nouvelle version.
- En fournissant votre propre fichier update.rdf à partir duquel vous gérez vos propres mises à jour.
Ce second point va être étudié en détail.
Dans le fichier install.rdf ci-dessus servant d’exemple, vous noterez la présence de la balise <em:updateURL>. Celle ci est nécessaire pour ce point 2 car elle contient le lien vers le fichier update.rdf situé sur votre propre serveur.
Pour QuickNote, il s’agit de :
<em:updateURL>http://jedbrown.net/dev/Mozilla/QNupdate.rdf</em:updateURL>
Un fichier update.rdf doit contenir les éléments suivants :
update.rdf
<?xml version="1.0"?>
<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:em="http://www.mozilla.org/2004/em-rdf#">
<RDF:Description about="urn:mozilla:extension:{C0CB8BA3-6C1B-47e8-A6AB-1FAB889562D9}">
<em:updates> //Indique les mises à jour disponibles
<RDF:Seq>
<RDF:li resource="urn:mozilla:extension:{C0CB8BA3-6C1B-47e8-A6AB-1FAB889562D9}:0.6"/>
</RDF:Seq>
</em:updates>
<em:version>0.6</em:version>//Utilisé pour la compatibilité avec Firefox 0.9.x.
<em:updateLink>http://downloads.mozdev.org/quicknote/quicknote_0_6.xpi</em:updateLink>
</RDF:Description>
//Les détails sur la mise à jour proposée, notez l'obligation des valeurs min/max.
<RDF:Description about="urn:mozilla:extension:{C0CB8BA3-6C1B-47e8-A6AB-1FAB889562D9}:0.6">
<em:version>0.6</em:version>
<em:targetApplication>
<Description>
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
<em:minVersion>0.8</em:minVersion>
<em:maxVersion>0.10</em:maxVersion>
<em:updateLink>http://downloads.mozdev.org/quicknote/quicknote_0_6.xpi</em:updateLink>
</Description>
</em:targetApplication>
</RDF:Description>
</RDF:RDF>
Notez que votre serveur DOIT fournir le fichier RDF avec son type mime correct ; soit text/rdf, soit text/xml. Vous pourrez savoir si votre serveur fournit le bon type mime en visualisant votre fichier .rdf sous Firefox de deux façons :
- Le code ci-dessus doit s’afficher sous Firefox comme ceci (faites le test, test avec le type mime) :
0.6 http://jedbrown.net/dev/Mozilla/quicknote_0_6.xpi 0.6 {ec8030f7-c20a-464f-9b0e-13a3a9e97384} 0.8 0.10 http://jedbrown.net/dev/Mozilla/quicknote_0_6.xpi
- Lorsque vous visualisez votre fichier RDF sous Firefox, cliquez sur « Informations sur la page » dans le menu contextuel, le type affiché devrait être : application/vnd.mozilla.xul+xml
Si vous avez procédé correctement, lorsque vous proposerez une nouvelle version de votre extension au travers du fichier RDF, le gestionnaire d’extensions devrait la détecter normalement lors de la vérification de la présence d’une mise à jour (figure 5).

- Figure 5
Depuis la version 1.0PR de Firefox, le mécanisme de mise à jour vous permet d’autres actions comme la mise à jour des plages de version min-max d’une extension sans la faire re-télécharger par l’utilisateur, et plus encore.
Les informations sur ces fonctionnalités sont disponibles (en anglais) sur Mozilla.org
[1] localisation : définition selon le jargon français
Articles dans la même rubrique
- Firefox 3 et le bouton d’identification des sites (15 juillet 2008 - 4590 visites - popularité 29%)
- Présentation des nouveautés de Mozilla Firefox 3 (17 juin 2008 - 17391 visites - popularité 41%)
- Nettoyer un profil Firefox (16 novembre 2007 - 49428 visites - popularité 26%)
Commentaires
(Si vous recherchez de l'aide pour l'utilisation d'un produit, veuillez utiliser les forums de Geckozone. Les commentaires concernent uniquement l'article. Merci.)
Afficher les commentaires (5) Ajouter un commentaire


