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: Zastosowanie nsIXULAppInfo
slug: Zastosowanie_nsIXULAppInfo
tags:
- Dodatki
- Rozszerzenia
- Wszystkie_kategorie
translation_of: Archive/Mozilla/XUL/Using_nsIXULAppInfo
---
<p>
Począwszy od Mozilla/<a href="pl/XULRunner">XULRunner</a> 1.8 istnieje sposób na dowiedzenie się na jakiej aplikacji, wersji aplikacji i wersji <a href="pl/Gecko">Gecko</a> pracuje Twój kod.
</p><p>Jest to bardzo przydatne np. dla <a href="pl/Rozszerzenia">rozszerzeń</a>, które obsługują kilka aplikacji opartych o Mozillę lub kilka wersji pojedynczej aplikacji. <b>Nie</b> jest to przydatne dla skryptów na stronach internetowych, które powinny nadal używać <a href="pl/DOM/window.navigator">obiektu navigator</a>, gdy nie jest możliwa detekcja na podstawie cech przeglądarki.
</p>
<h2 id="Interfejs_nsIXULAppInfo"> Interfejs <code>nsIXULAppInfo</code> </h2>
<p>Aby rozdróżnić różne aplikacje oparte o Mozillę, użyj zamrożonego interfejsu <a href="pl/NsIXULAppInfo">nsIXULAppInfo</a>. Poniższe fragmenty zawierają kilka przykładów użycia <code>nsIXULAppInfo</code> z poziomu JavaScriptu.
</p><p>Zauważ że, mimo iż Firefox 1.5, Thunderbird 1.5 i inne aplikacje oparte o <a href="pl/XULRunner">XULRunnera</a> 1.8 obsługują <code>nsIXULAppInfo</code>, starsze aplikacje, takie jak Firefox i Thunderbird 1.0, nie obsługują go. Będziesz musiał napisać <a href="#old">dodatkowy kod dla starszych wersji</a>.
</p>
<h3 id="Uzyskiwanie_nsIXULAppInfo"> Uzyskiwanie <code>nsIXULAppInfo</code> </h3>
<p>Aby uzyskać komponent implementujący <code>nsIXULAppInfo</code> użyj tego kodu:
</p>
<pre class="eval">var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
.getService(Components.interfaces.nsIXULAppInfo);
</pre>
<p>(Po więcej wyjaśnień zajrzyj na <a class="external" href="http://xulplanet.com/references/xpcomref/creatingcomps.html">ten artykuł z XUL Planet</a>.)
</p>
<h3 id="Uzyskiwanie_informacji_o_aplikacji"> Uzyskiwanie informacji o aplikacji </h3>
<p>Po otrzymaniu komponentu możesz odczytać jego własności, aby uzyskać identyfikator aplikacji, nazwę rozumianą przez człowieka, wersję, platformę itd. Aby zobaczyć pełną listę własności <code>nsIXULAppInfo</code>, zobacz opis interfejsu <a href="pl/NsIXULAppInfo">nsIXULAppInfo</a>.
</p>
<h4 id="Identyfikator"> Identyfikator </h4>
<p>Możesz dowiedzieć się na jakiej aplikacji pracujesz poprzez użycie własności <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) {
// pracujemy pod Firefoksem
} else if(appInfo.ID == THUNDERBIRD_ID) {
// pracujemy pod Thunderbirdem
} else {
// inna aplikacja
}
</pre>
<p>Uwaga: możesz również użyć własności <code>nsIXULAppInfo.name</code>, która zwraca nazwę bardziej przyjazną dla człowieka, taką jak "Firefox" - ale kto wie, może znowu zmienią jej nazwę!
</p>
<h4 id="Wersja"> Wersja </h4>
<p>Czasami musisz znać wersję aplikacji, na której działa Twój kod. Przykładowo, jedna z odmrożonych funkcji, na której polegałeś, została zmieniona.
</p><p><b>Uwaga: <code>nsIXULAppInfo</code> dostarcza informacji o <i>aplikacji</i> i <i>platformie</i>, bądź więc ostrożny i wybierz właściwą, zwłaszcza przy obsłudze aplikacji opartych o XULRunnera.</b>
</p><p>W takim przypadku chciałbyś prawdopodobnie sprawdzić <code>nsIXULAppInfo.version</code> i/lub <code>nsIXULAppInfo.appBuildID</code>. Druga własność jest użyteczna, jeśli zamierzasz obsługiwać rozwojowe wersje nightly aplikacji, natomiast pierwsza, gdy zamierzasz wspierać tylko oficjalne wydania wprowadzając rozróżnienie między kompilacjami gałęzi a kompilacjami pnia.
</p><p><b>Przykład 1: sprawdzenie wersji Firefoksa</b>
</p>
<pre class="eval">// przyjmując, że pracujemy pod Firefoksem
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) {
// używamy Firefoksa 1.5 lub późniejszego
}
</pre>
<p><b>Przykład 2: radzimy sobie z wersjami nightly</b>
</p>
<pre class="eval">var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
.getService(Components.interfaces.nsIXULAppInfo);
if(appInfo.appBuildID >= "2005093006") {
// używamy kompilacji 2005093006 lub nowszej
}
</pre>
<p>Nie powinieneś polegać na identyfikatorach kompilacji w przypadku wydań, ponieważ mogą one być różne dla konkretnych kompilacji lub zlokalizowanych wersji aplikacji.
</p>
<h4 id="Wersja_platformy"> Wersja platformy </h4>
<p><code>nsIXULAppInfo</code> dostarcza informacji zarówno o aplikacji (jak na przykład Firefoksie) i platformie (tzn. Gecko lub XULRunner). Na przykład, w Firefoksie 1.5 beta 2 wersja aplikacji to 1.4.1, a wersja platformy to 1.8b5. Bądź ostrożny przy korzystaniu z tych informacji, zwłaszcza przy obsłudze aplikacji opartych o XULRunnera.
</p><p>Uzyskiwanie informacji o wersji platformy wygląda następująco:
</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><s id="old">
</s></p><s id="old">
<h2 id="Starsze_wersje"> Starsze wersje </h2>
<p>Jak wspomniano wyżej, starsze wersji aplikacji oparte o Mozillę 1.7 nie obsługują <code>nsIXULAppInfo</code>. Musisz napisać dodatkowy kod, jeśli zdecydujesz się na ich obsługę.
</p><p>Na przykład, Firefox i Thunderbird 1.0 przechowywały swoje identyfikatory w opcji <code>app.id</code> (a wersje w <code>app.version</code>), więc mógłbyś użyć kodu takiego jak ten, by dowiedzieć się na jakiej aplikacji pracujesz:
</p>
<pre class="eval">function getAppID() {
var id;
if("@mozilla.org/xre/app-info;1" in Components.classes) {
// running under Mozilla 1.8 or later
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) {
// bardzo stara wersja
dump(e);
}
}
return id;
}
alert(getAppID());
</pre>
<h2 id="Zobacz_także"> Zobacz także </h2>
<ul><li> MXR: <a href="https://dxr.mozilla.org/mozilla-central/source/xpcom/system/nsIXULAppInfo.idl" rel="custom">nsIXULAppInfo.idl</a>
</li></ul>
</s>
|