Please note, this is a STATIC archive of website developer.mozilla.org from November 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

Zastosowanie nsIXULAppInfo

Począwszy od Mozilla/XULRunner 1.8 istnieje sposób na dowiedzenie się na jakiej aplikacji, wersji aplikacji i wersji Gecko pracuje Twój kod.

Jest to bardzo przydatne np. dla rozszerzeń, które obsługują kilka aplikacji opartych o Mozillę lub kilka wersji pojedynczej aplikacji. Nie jest to przydatne dla skryptów na stronach internetowych, które powinny nadal używać obiektu navigator, gdy nie jest możliwa detekcja na podstawie cech przeglądarki.

Interfejs nsIXULAppInfo

Aby rozdróżnić różne aplikacje oparte o Mozillę, użyj zamrożonego interfejsu nsIXULAppInfo. Poniższe fragmenty zawierają kilka przykładów użycia nsIXULAppInfo z poziomu JavaScriptu.

Zauważ że, mimo iż Firefox 1.5, Thunderbird 1.5 i inne aplikacje oparte o XULRunnera 1.8 obsługują nsIXULAppInfo, starsze aplikacje, takie jak Firefox i Thunderbird 1.0, nie obsługują go. Będziesz musiał napisać dodatkowy kod dla starszych wersji.

Uzyskiwanie nsIXULAppInfo

Aby uzyskać komponent implementujący nsIXULAppInfo użyj tego kodu:

var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
                        .getService(Components.interfaces.nsIXULAppInfo);

(Po więcej wyjaśnień zajrzyj na ten artykuł z XUL Planet.)

Uzyskiwanie informacji o aplikacji

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 nsIXULAppInfo, zobacz opis interfejsu nsIXULAppInfo.

Identyfikator

Możesz dowiedzieć się na jakiej aplikacji pracujesz poprzez użycie własności 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) {
  // pracujemy pod Firefoksem
} else if(appInfo.ID == THUNDERBIRD_ID) {
  // pracujemy pod Thunderbirdem
} else {
  // inna aplikacja
}

Uwaga: możesz również użyć własności nsIXULAppInfo.name, która zwraca nazwę bardziej przyjazną dla człowieka, taką jak "Firefox" - ale kto wie, może znowu zmienią jej nazwę!

Wersja

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.

Uwaga: nsIXULAppInfo dostarcza informacji o aplikacji i platformie, bądź więc ostrożny i wybierz właściwą, zwłaszcza przy obsłudze aplikacji opartych o XULRunnera.

W takim przypadku chciałbyś prawdopodobnie sprawdzić nsIXULAppInfo.version i/lub nsIXULAppInfo.appBuildID. 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.

Przykład 1: sprawdzenie wersji Firefoksa

// 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
}

Przykład 2: radzimy sobie z wersjami nightly

var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
                        .getService(Components.interfaces.nsIXULAppInfo);
if(appInfo.appBuildID >= "2005093006") {
  // używamy kompilacji 2005093006 lub nowszej
}

Nie powinieneś polegać na identyfikatorach kompilacji w przypadku wydań, ponieważ mogą one być różne dla konkretnych kompilacji lub zlokalizowanych wersji aplikacji.

Wersja platformy

nsIXULAppInfo 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.

Uzyskiwanie informacji o wersji platformy wygląda następująco:

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">

Starsze wersje

Jak wspomniano wyżej, starsze wersji aplikacji oparte o Mozillę 1.7 nie obsługują nsIXULAppInfo. Musisz napisać dodatkowy kod, jeśli zdecydujesz się na ich obsługę.

Na przykład, Firefox i Thunderbird 1.0 przechowywały swoje identyfikatory w opcji app.id (a wersje w app.version), więc mógłbyś użyć kodu takiego jak ten, by dowiedzieć się na jakiej aplikacji pracujesz:

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());

Zobacz także

</s>

Autorzy i etykiety dokumentu

 Autorzy tej strony: Diablownik
 Ostatnia aktualizacja: Diablownik,