À partir de Mozilla/XULRunner 1.8, il existe une nouvelle manière de connaître l'application, sa version et la version de Gecko sur laquelle votre code tourne.
Cela peut s'avérer utile, par exemple, dans le cas d'extensions prévues pour fonctionner sur plusieurs applications basées sur Mozilla ou différentes versions d'une même application. Ce n'est pas utile pour les scripts sur des pages Web, qui doivent utiliser l'objet navigator.
L'interface nsIXULAppInfo
Pour faire la distinction entre différentes applications basées sur Mozilla, utilisez l'interface gelée nsIXULAppInfo. Les sections suivantes proposent quelques exemples d'utilisation de nsIXULAppInfo
depuis JavaScript.
Notez que si Firefox 1.5, Thunderbird 1.5, et les applications basées sur XULRunner 1.8 supportent nsIXULAppInfo
, des applications plus anciennes comme Firefox et Thunderbird 1.0 ne le font pas. Vous devrez utiliser du code supplémentaire pour ces anciennes versions.
Obtenir nsIXULAppInfo
Pour qu'un composant implémente nsIXULAppInfo
, utilisez ce code :
var appInfo = Components.classes["@mozilla.org/xre/app-info;1"] .getService(Components.interfaces.nsIXULAppInfo);
(Pour une explication, consultez cet article sur XUL Planet.)
Des informations sur l'application
Après avoir obtenu le composant d'information sur l'application, vous pouvez lire ses propriétés pour connaître l'ID de l'application, son nom lisible par un humain, sa version, la plateforme utilisée, etc. Pour une liste complète des propriétés de nsIXULAppInfo
, veuillez consulter la description de l'interface nsIXULAppInfo.
ID
Vous pouvez connaître l'application sous laquelle vous tournez à l'aide de la propriété nsIXULAppInfo.ID
.
const FIREFOX_ID = "{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"; const THUNDERBIRD_ID = "{3550f703-e582-4d05-9a08-453d09bdfdc6}"; var appInfo = Components.classes["@mozilla.org/xre/app-info;1"] .getService(Components.interfaces.nsIXULAppInfo); if(appInfo.ID == FIREFOX_ID) { // on est sous Firefox } else if(appInfo.ID == THUNDERBIRD_ID) { // on est sous Thunderbird } else { // c'est une autre application }
Note : vous auriez également pu utiliser nsIXULAppInfo.name
, qui est un nom lisible par un humain pour l'application, comme « Firefox », mais qui sait, peut-être qu'il changera encore de nom !
Version
Dans certains cas, vous aurez besoin de connaître la version de l'application sous laquelle tourne votre code. Par exemple, une des fonctions non gelée que vous utilisez peut avoir changé.
Note : nsIXULAppInfo
fournit des informations concernant l'application et la plateforme, faites attention d'utiliser la bonne, particulièrement dans le cas d'applications basées sur XULRunner.
Dans de tels cas, vous voudrez probablement vérifier nsIXULAppInfo.version
et/ou nsIXULAppInfo.appBuildID
. Cette dernière est utile si vous essayez de fonctionner avec des nightlies de développement de l'application, tandis que la premère est plutôt utile si vous prenez uniquement en compte les sorties officielles, et pour faire la distinction entre les compilations de branches particulières ou du tronc.
Exemple 1 : vérification de la version de Firefox
// en supposant qu'on tourne sous Firefox var appInfo = Components.classes["@mozilla.org/xre/app-info;1"] .getService(Components.interfaces.nsIXULAppInfo); var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"] .getService(Components.interfaces.nsIVersionComparator); if(versionChecker.compare(appInfo.version, "1.5") >= 0) { // il s'agit de Firefox 1.5 ou supérieur }
Exemple 2 : reconnaître les nightlies
var appInfo = Components.classes["@mozilla.org/xre/app-info;1"] .getService(Components.interfaces.nsIXULAppInfo); if(appInfo.appBuildID >= "2005093006") { // la compilation est postérieure ou égale à 2005093006 }
Vous ne devriez pas vous baser sur les ID de compilation pour des versions officielles, car l'ID de compilation peut être différent pour des compilations personnalisées ou les version localisées d'une application.
Version de la plateforme
nsIXULAppInfo
fournit des informations de version à propos de l'application XUL (comme Firefox) et la plateforme (c'est-à-dire Gecko ou XULRunner). Par exemple, dans Firefox 1.5 beta 2 la version de l'application est 1.4.1 et la version de la plateforme est 1.8b5. Faites attention d'utiliser l'information dont vous avez besoin, particulièrement dans le cas d'applications basées sur XULRunner.
L'obtention des informations de version sur la plateforme s'effectue ainsi :
var appInfo = Components.classes["@mozilla.org/xre/app-info;1"] .getService(Components.interfaces.nsIXULAppInfo); var platformVer = appInfo.platformVersion; var platformBuildID = appInfo.platformBuildID;
<s id="old"> </s>
<s id="old">Versions plus anciennes
Comme indiqué plus haut, les anciennes application basées sur Mozilla 1.7 ne supportent pas nsIXULAppInfo
. Vour aurez à écrire du code supplémentaire si vous choisissez de fonctionner avec ces versions.
Par exemple, Firefox et Thunderbird 1.0 stockaient leur ID dans la préférence app.id
(et leur version dans app.version
), donc vous pouvez utiliser un code comme celui-ci pour savoir sous quelle application vous tournez :
function getAppID() { var id; if("@mozilla.org/xre/app-info;1" in Components.classes) { // on est sous Mozilla 1.8 ou supérieur id = Components.classes["@mozilla.org/xre/app-info;1"] .getService(Components.interfaces.nsIXULAppInfo).ID; } else { try { id = Components.classes["@mozilla.org/preferences-service;1"] .getService(Components.interfaces.nsIPrefBranch) .getCharPref("app.id"); } catch(e) { // très ancienne version dump(e); } } return id; } alert(getAppID());
Voir aussi
- LXR : nsIXULAppInfo.idl