aboutsummaryrefslogtreecommitdiff
path: root/files/fr/archive/mozilla/xul/utilisation_de_nsixulappinfo/index.html
blob: 10f33316ad3b9f65b5494fb32d208c823c1c231f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
---
title: Utilisation de nsIXULAppInfo
slug: Archive/Mozilla/XUL/Utilisation_de_nsIXULAppInfo
tags:
  - Extensions
translation_of: Archive/Mozilla/XUL/Using_nsIXULAppInfo
---
<p>
À partir de Mozilla/<a href="fr/XULRunner">XULRunner</a> 1.8, il existe une nouvelle manière de connaître l'application, sa version et la version de <a href="fr/Gecko">Gecko</a> sur laquelle votre code tourne.
</p><p>Cela peut s'avérer utile, par exemple, dans le cas d'<a href="fr/Extensions">extensions</a> prévues pour fonctionner sur plusieurs applications basées sur Mozilla ou différentes versions d'une même application. Ce n'est <b>pas</b> utile pour les scripts sur des pages Web, qui doivent utiliser <a href="fr/DOM/window.navigator">l'objet navigator</a>.
</p>
<h2 id="L'interface_nsIXULAppInfo"> L'interface <code>nsIXULAppInfo</code> </h2>
<p>Pour faire la distinction entre différentes applications basées sur Mozilla, utilisez l'interface gelée <a href="fr/NsIXULAppInfo">nsIXULAppInfo</a>. Les sections suivantes proposent quelques exemples d'utilisation de <code>nsIXULAppInfo</code> depuis JavaScript.
</p><p>Notez que si Firefox 1.5, Thunderbird 1.5, et les applications basées sur <a href="fr/XULRunner">XULRunner</a> 1.8 supportent <code>nsIXULAppInfo</code>, des applications plus anciennes comme Firefox et Thunderbird 1.0 ne le font pas. Vous devrez utiliser du <a href="#old">code supplémentaire pour ces anciennes versions</a>.
</p>
<h3 id="Obtenir_nsIXULAppInfo"> Obtenir <code>nsIXULAppInfo</code> </h3>
<p>Pour qu'un composant implémente <code>nsIXULAppInfo</code>, utilisez ce code :
</p>
<pre class="eval">var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
                        .getService(Components.interfaces.nsIXULAppInfo);
</pre>
<p>(Pour une explication, consultez <a class="external" href="http://xulplanet.com/references/xpcomref/creatingcomps.html">cet article sur XUL Planet</a>.)
</p>
<h3 id="Des_informations_sur_l'application"> Des informations sur l'application </h3>
<p>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 <code>nsIXULAppInfo</code>, veuillez consulter la description de l'interface <a href="fr/NsIXULAppInfo">nsIXULAppInfo</a>.
</p>
<h4 id="ID"> ID </h4>
<p>Vous pouvez connaître l'application sous laquelle vous tournez à l'aide de la propriété <code>nsIXULAppInfo.ID</code>.
</p>
<pre class="eval">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
}
</pre>
<p>Note : vous auriez également pu utiliser <code>nsIXULAppInfo.name</code>, qui est un nom lisible par un humain pour l'application, comme « Firefox », mais qui sait, peut-être qu'il changera encore de nom !
</p>
<h4 id="Version"> Version </h4>
<p>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é.
</p><p><b>Note : <code>nsIXULAppInfo</code> fournit des informations concernant l'<i>application</i> et la <i>plateforme</i>, faites attention d'utiliser la bonne, particulièrement dans le cas d'applications basées sur XULRunner.</b>
</p><p>Dans de tels cas, vous voudrez probablement vérifier <code>nsIXULAppInfo.version</code> et/ou <code>nsIXULAppInfo.appBuildID</code>. 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.
</p><p><b>Exemple 1 : vérification de la version de Firefox</b>
</p>
<pre class="eval">// 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") &gt;= 0) {
  // il s'agit de Firefox 1.5 ou supérieur
}
</pre>
<p><b>Exemple 2 : reconnaître les nightlies</b>
</p>
<pre class="eval">var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
                        .getService(Components.interfaces.nsIXULAppInfo);
if(appInfo.appBuildID &gt;= "2005093006") {
  // la compilation est postérieure ou égale à 2005093006
}
</pre>
<p>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.
</p>
<h4 id="Version_de_la_plateforme"> Version de la plateforme </h4>
<p><code>nsIXULAppInfo</code> 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.
</p><p>L'obtention des informations de version sur la plateforme s'effectue ainsi :
</p>
<pre class="eval">var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
                        .getService(Components.interfaces.nsIXULAppInfo);
var platformVer = appInfo.platformVersion;
var platformBuildID = appInfo.platformBuildID;
</pre>
<p>&lt;s id="old"&gt;
&lt;/s&gt;</p>&lt;s id="old"&gt;
<h2 id="Versions_plus_anciennes"> Versions plus anciennes </h2>
<p>Comme indiqué plus haut, les anciennes application basées sur Mozilla 1.7 ne supportent pas <code>nsIXULAppInfo</code>. Vour aurez à écrire du code supplémentaire si vous choisissez de fonctionner avec ces versions.
</p><p>Par exemple, Firefox et Thunderbird 1.0 stockaient leur ID dans la préférence <code>app.id</code> (et leur version dans <code>app.version</code>), donc vous pouvez utiliser un code comme celui-ci pour savoir sous quelle application vous tournez :
</p>
<pre class="eval">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());
</pre>
<h2 id="Voir_aussi"> Voir aussi </h2>
<ul><li> LXR : <a class="external" href="http://lxr.mozilla.org/seamonkey/source/toolkit/xre/nsIXULAppInfo.idl">nsIXULAppInfo.idl</a>
</li></ul>
<div class="noinclude">
</div>
&lt;/s&gt;