mozilla
Wyniki wyszukiwania

    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

    Contributors to this page: Diablownik
    Ostatnia aktualizacja: Diablownik,