Pour développer des extensions pour Firefox, Thunderbird ou autres applications basées sur la plateforme Mozilla, il faut configurer le logiciel de façon à faciliter le développement.
Les instructions qui suivent sont données avec Firefox, mais valent normalement pour toute application Mozilla. (remplacez « Firefox » et « navigateur » par le nom de votre application préférée ;-) ).
Ces instructions valent uniquement pour Gecko 1.8 et plus (Firefox 1.5, Thunderbird 1.5, etc.). Pour d'anciennes versions, voir une ancienne version du tuto.
Pour développer, on ne fait pas de package XPI pour son extension. Ce serait beaucoup trop lourd. À la place, on dépose ses fichiers dans un répertoire/dossier quelconque (ou directement dans le répertoire chrome) et on déclare ce répertoire/dossier dans l'application.
Pour le développement, il faut obligatoirement utiliser un profil spécifique si vous utilisez déjà l'application en question pour vos besoins personnels. Par exemple, pour développer une extension pour Firefox, vous aurez besoin d'une première instance de (Firefox) pour pouvoir surfer, consulter de la documentation et d'une deuxième instance pour développer et tester votre application. L'utilisation de deux navigateurs permet de ne pas à avoir à recharger toutes les pages web que l'on consulte en parallèle du développement. En effet, les tests de l'application nécessitent de la relancer souvent, suite à un plantage ou pour prendre en compte vos modifications.
Pour avoir "deux" firefox, vous aurez donc besoin de deux profils : un pour surfer, l'autre pour développer. Cela évite en plus d'une éventuelle destruction de vos données personnelles si dans votre extension vous manipulez les données du profil.
Si vous êtes sous Linux, évitez, pour le développement, d'utiliser le paquetage Firefox fourni avec votre distribution. Vous utiliserez le Firefox de votre distribution uniquement pour le surf et autre activité. En effet, il y a déjà eu des problèmes (notamment pour la déclaration dans le chrome) car les fichiers des paquetages ne sont pas accessibles en écriture, ou ils sont éparpillés sur le disque, ce qui n'est pas pratique.
Il vous faut donc installer une autre version Firefox fournie sous forme d'un fichier tar.gz sur le ftp de Mozilla.org. Vous l'installerez dans votre répertoire home, avec votre login afin d'avoir tous les privilèges sur les fichiers de cette installation.
Il faut tout de même faire une manipulation supplémentaire, car Firefox tente toujours de réutiliser une fenêtre existante au démarrage.
Pour se faire, avant de lancer firefox, il faut créer la variable d'environnement MOZ_NO_REMOTE avec une valeur à 1.
export MOZ_NO_REMOTE=1
Vous pouvez mettre cette instruction dans votre fichier $HOME/.bash_profile pour éviter de la taper à chaque fois. Vous pouvez aussi modifier le script firefox qui se trouve dans le firefox dézippé, et rajouter cette commande au début.
L'installateur de Firefox n'est disponible que sous forme d'exécutable (pas de zip). Cependant ce n'est pas un problème. Installez-le si ce n'est pas déjà fait.
Comme sous linux, il va falloir utiliser cette fameuse variable d'environnement MOZ_NO_REMOTE pour lancer deux véritables instances de Firefox. ( Au lancement de Firefox, celui-ci vérifie qu'une instance n'est pas déjà lancée, et active celle-ci si elle existe, ce que nous ne voulons pas).
Il y a plusieurs solutions.
Par exemple, vous pouvez utiliser le script batch suivant (fichier .BAT) pour démarrer une version « spéciale » de Firefox (ici installée dans "C:\Program Files\Mozilla Firefox 1.5"), après avoir créé un nouveau profil (ici « test1.5 », voir les points suivants) :
cd /d "C:\Program Files\Mozilla Firefox 1.5"
set MOZ_NO_REMOTE=1
start firefox.exe -P test1.5
L'avantage de l'utilisation du fichier BAT, c'est qu'il ne fixe pas de façon globale la variable MOZ_NO_REMOTE pour tout le système. Seule l'instance spéciale est en mode MOZ_NO_REMOTE.
La deuxième, c'est de fixer cette valeur définitivement. Pour ce faire, allez dans le panneau de configuration, ouvrez la boîte de dialogue système. Sur l'un des onglets, il y a un bouton "variables d'environnements". Cliquez dessus, et dans la boîte de dialogue qui apparait, rajoutez MOZ_NO_REMOTE avec une valeur à 1.
Quand on lance deux instances d'une même application Mozilla, elles utilisent le même profil. Pour éviter d'éventuels dégâts dans votre profil personnel, il vaut mieux utiliser un profil de test pour le Firefox qui sert au développement (nous l'appellerons le profil « firefoxdev »).
Pour créer un profil de test, ouvrez une ligne de commande :
# firefox -CreateProfile test
Ensuite, pour utiliser le firefox avec votre profil :
# firefox -P default
Et pour celui qui sert au développement
# firefox -P test
Dans votre environnement graphique (windows, kde,...), vous pouvez vous créer deux icones sur le bureau pour lancer firefox et spécifier ces paramètres supplémentaires.
Dans le fichier prefs.js du profil test, il faut spécifier quelques options qui facilitent le débogage. Elles sont indispensables si on ne veut pas tourner en rond pendant des heures à rechercher la cause d'un dysfonctionnement.
(Les profils sont stockés dans /home/votrecompte/.mozilla/firefox/ pour Linux, et dans c:\Documents and Settings\votrecompte\Application Data\Mozilla\Firefox\Profiles pour Windows)
Ajoutez au fichier les lignes suivantes :
user_pref("nglayout.debug.disable_xul_cache", true); // désactive le cache XUL
user_pref("nglayout.debug.disable_xul_fastload", true); // lié au précédent, facultatif
user_pref("javascript.options.strict", true); // active l'affichage de toutes les erreurs d'exécutions
user_pref("javascript.options.showInConsole", true); // active l'affichage de toutes les erreurs de syntaxe
user_pref("browser.dom.window.dump.enabled", true); // active le dump sur la console
Il vous faut choisir un répertoire/dossier où vous installerez les fichiers sources de votre application. Elle peut contenir un ou plusieurs répertoires principaux, dont les répertoires "content", "locale" et "skin". Pour que votre application puisse fonctionner dans le même contexte qu'un paquet XPI installé, chacun de ces répertoires doit être déclaré dans le chrome. Bien entendu, il n'est pas nécessaire lors de la phase de développement, à chaque modification, de passer par la réalisation d'un paquet XPI. Il suffit juste d'indiquer votre liste de répertoires dans un fichier spécifique.
Voir comment enregistrer vos répertoires dans le chrome.
N'hésitez pas à lire la section dédiée dans le tutoriel : http://xulfr.org/xulplanet/xultu/packagi(..) (Attention, cela concerne Gecko 1.7 : Firefox 1.0, Thunderbird 1.0 et Mozilla 1.7, mais sa lecture peut vous êtes utile pour la compréhension générale)
Pour bien suivre le déroulement de l'exécution de l'application et pouvoir mieux déboguer, il est préférable de lancer Firefox avec la console système et la console javascript. Pour cela, lancer Firefox en ligne de commande avec les options -console et -jsconsole. (options que vous pouvez rajouter dans les propriétés de l'îcone du bureau si vous en avez fait une).
Ensuite, soit on lance l'application dans le navigateur, soit on lance seulement l'application.
Cette solution est la plus pratique car l'application va s'afficher comme une page web, et on pourra faire des rafraîchissements de la fenêtre pour recharger instantanément l'application en cours de modification.
On lance donc Firefox comme suit :
firefox -P test -console -jsconsole -chrome [[chrome://browser/content/]]
Remarque : on peut créer un raccourci sous windows ou KDE
Ensuite, dans la barre d'URL du navigateur, tapez :
[[chrome://monappli/content/monappli.xul]]
L'application s'affiche dans la fenêtre de votre navigateur.
Vous pouvez aussi déclarer un overlay, qui ajoutera un bouton dans la toolbar, ou un item de menu, et sur les commandes de ces boutons, faire un window.open("chrome://monappli/content/monappli.xul",(..); pour ouvrir votre application dans une nouvelle fenêtre indépendante.
La procédure est sensiblement la même, à la différence de l'adresse du chrome au démarrage :
firefox -P test -console -jsconsole -chrome [[chrome://monappli/content/monappli.xul]]
Ce mode de lancement peut être utile dans certains cas, quand vous n'avez pas d'overlay (donc affichez l'application dans la partie browser), et lorsque vous voyez que certains évènements ou commandes ne sont pas générés, lorsque des glisser-déposer s'avèrent difficiles etc. En effet, le navigateur intercepte certains évènements pour ses propres besoins, ce qui peut empêcher votre application de fonctionner correctement. Il faut donc la lancer hors navigateur comme indiqué.
Quand votre extension/application est terminée, vous pouvez créer ce raccourci :
firefox -chrome [[chrome://monappli/content/]] -nosplash
Vous pouvez aussi, grâce aux overlays, ajouter un élément de menu (menuitem) ou un bouton dans la barre des boutons (toolbar) de Firefox pour lancer l'application.
Utilisez un éditeur supportant UTF-8 et enregistrant en UTF-8 (indispensable pour les DTD) !
Pour plus d'informations, voir http://xulfr.org/xulplanet/xultu/xpinsta(..) ou http://books.mozdev.org/html/mozilla-chp(..)
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.