Démarrer un projet
Information de base
- Vendeur (compagnie ou nom du développer): ($app_vendor)
- Nom de l'application: ($app_name)
- Répertoire de l'application (minuscule): ($app_metaname)
- Version: ($app_version)
- Date de livraison (YYYYMMDD): ($app_buildid)
- Copyright: ($app_copyright)
- Courriel pour l'application: ($app_id)
#!/bin/bash app_vendor="" app_name="" app_metaname= app_id= app_copyright="Copyright (C) $(date +%Y) $app_vendor" app_version=1.0 app_buildid=$(date +%Y%m%d) # create this hierarchy #/$app_metaname # /chrome # /content # main.xul # chrome.manifest # /defaults # /preferences # prefs.js # application.ini if [ -d $app_metaname -o "x$app_metaname" = "x" ]; then echo "Directory \`$app_metaname' already exists" exit; fi mkdir -p $app_metaname/{chrome/content,defaults/preferences} # touch $app_metaname/{chrome/content/main.xul,chrome/chrome.manifest,defaults/preferences/prefs.js,application.ini} cat <<EOF > $app_metaname/application.ini [App] Vendor=$app_vendor Name=$app_name Version=$app_version BuildID=$app_buildid Copyright=$app_copyright ID=$app_id [Gecko] MinVersion=1.8 MaxVersion=1.9.0.* EOF cat <<EOF > $app_metaname/chrome/chrome.manifest content $app_metaname file:content/ EOF cat <<EOF > $app_metaname/defaults/preferences/pref.js pref("toolkit.defaultChromeURI", "chrome://$app_metaname/content/main.xul"); // see window.open on MDC for chrome features (centerscreen, ...) // pref("toolkit.defaultChromeFeatures", "chrome,dialog=no,all"); EOF cat <<EOF > $app_metaname/chrome/content/main.xul <?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin/" type="text/css"?> <window id="main" title="$app_name" width="300" height="300" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <caption label="Hello World"/> </window> EOF # end of create xulrunner project
Lancement de l'application
La commande xulrunner est utilisé pour lancer l'application. xulrunner application.ini # lancement xulrunner application.ini -jsconsole # lancement et affichage des erreurs javascript/css Sur debian [20080905], on retrouve xulrunner et xulrunner-1.9. Si on veut utiliser la version 1.9, on doit écrire: xulrunner-1.9 application.ini
Fichiers modifiés lors du lancement
Lors du lancement de l'application, xulrunner ajoutera automatiquement des répertoires et des fichiers. Parmi ces répertoires et fichiers:
Dans la racine du programme: + extensions/ + updates/0/ Dans le répertoire de l'usager (préférence): ~/.{$app_vendor}/{$app_name}/ Notez bien que {$app_vendor} et {$app_name} utilise les valeurs spécifiés dans le fichier application.ini - profiles.ini : fichier texte contenant des informations sur le profil utilisé pour lancer l'application + repertoire.default/ : répertoire du profil (le premier profil a un nom automatiquement généré et est inscrit dans le profiles.ini, section Profile0, variable Path). - compreg.dat : fichier texte, enregistrement des bibliothèques (XPCOM .so). On doit supprimer le fichier compreg.dat lorsqu'on modifie une bibliothèque (.so) du répertoire components/. - xpti.dat : fichier texte, enregistrement des interfaces typelib (XPCOM .xpt). On doit le supprimer lorsqu'on modifie un composant (.xpt) du répertoire components/. - prefs.js : autres préférences spécifiques au profil de l'utilisateurs. user_pref("nom_preference", "valeur");
Ajouter un composant XPCOM
Voir mon article sur XPCOM pour une aide sur comment compiler un composant et l'intégrer dans un projet xulrunner.
application.ini
Le fichier application.ini permet de démarrer l'application en spécifiant des informations de démarrage comme la version minimale ou maximal de Gecko (xulrunner).
Exemple
[App] Vendor=Progysm Name=Mon App Version=1.0 BuildID=20090101 Copyright=Yan Morin ID=monapp@progysm.no-ip.org [Gecko] MinVersion=1.8 MaxVersion=1.9.0.*
Récupérer en Javascript application.ini
var appInfo = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo); appInfo.vendor; // [App] Vendor appInfo.name; // [App] Name appInfo.ID; // [App] ID appInfo.version; // [App] Version appInfo.appBuildID; // [App] BuildID appInfo.platformVersion; // dépend de gecko (xulrunner) appInfo.platformBuildID; // dépend de gecko (xulrunner)
chrome.manifest
Note: if your chrome.manifest is inside chrome/ folder, don't put chrome/ in url token.
content
content templatechooser content/ # for chrome://templatechooser/content/
skin
skin myApp classic/1.0 skin/classic/myapp/ # for chrome://myApp/skin/ (where theme is classic)
locale
Note: si on oublie le / à la fin des répertoires, il faut utiliser la syntaxe "chrome://cle/locale/dernierrepertoire/fichier.dtd".
locale branding fr-FR locale/branding/ # for chrome://branding/locale/ locale myApp en-US locale/en-US/myapp/ # for chrome://myApp/locale/
overlay
overlay chrome://messenger/content/messengercompose/messengercompose.xul chrome://templatechooser/content/templatechooser_overlay.xul
Hyperliens...