Instalowanie rozszerzeń w systemie Linux

Rozszerzenia hostowane poza Chrome Web Store mogą być instalowane tylko przez użytkowników systemu Linux. Z tego artykułu dowiesz się, jak pakować, hostować i aktualizować pliki .crx z serwera osobistego. Jeśli rozpowszechniasz rozszerzenie lub motyw wyłącznie w Chrome Web Store, zapoznaj się z artykułem Hosting i aktualizowanie w Chrome Web Store.

Sposób prezentacji

Rozszerzenia i motywy są udostępniane jako pliki .crx. Podczas przesyłania za pomocą panelu dewelopera Chrome panel automatycznie tworzy plik .crx. Jeśli jest opublikowany na serwerze osobistym, plik .crx musi zostać utworzony lokalnie lub pobrany z Chrome Web Store.

Pobieranie pliku .crx z Chrome Web Store

Jeśli rozszerzenie jest hostowane w Chrome Web Store, plik .crx można pobrać z Panelu dewelopera. Znajdź rozszerzenie w sekcji „Twoje wizytówki” i kliknij „Więcej informacji”. W wyskakującym okienku kliknij niebieski link main.crx, aby pobrać plik.

Pobieranie pliku .crx z Panelu dewelopera

Pobrany plik można hostować na serwerze osobistym. Jest to najbezpieczniejszy sposób hostowania rozszerzenia lokalnie, ponieważ zawartość rozszerzenia będzie podpisana przez Chrome Web Store. Pomaga to wykrywać potencjalne ataki i ingerencje.

Tworzenie pliku .crx lokalnie

Katalogi rozszerzeń są konwertowane na .crx na stronie zarządzania rozszerzeniami. Wpisz adres chrome://extensions/ w omniboksie lub kliknij menu Chrome, najedź kursorem na „Więcej narzędzi”, a następnie wybierz „Rozszerzenia”.

Na stronie zarządzania rozszerzeniami włącz tryb programisty, klikając przełącznik obok opcji Tryb programisty. Następnie kliknij przycisk ROZSZERZENIE PAKIETU.

Zaznaczony jest tryb programisty, a następnie kliknij Spakuj rozszerzenie.

W polu Katalog główny rozszerzenia podaj ścieżkę do folderu rozszerzenia, a następnie kliknij przycisk SPAKUJ ROZSZERZENIE. W przypadku pierwszego pakietu zignoruj pole Klucz prywatny.

Określ ścieżkę rozszerzenia, a potem kliknij „Spakuj rozszerzenie”.

Chrome utworzy 2 pliki: .crx.pem, który zawiera klucz prywatny rozszerzenia.

Spakowane pliki rozszerzeń

Nie zgub klucza prywatnego! Plik .pem przechowuj w bezpiecznym miejscu, do którego nikt nie ma dostępu. Będzie on potrzebny do zaktualizowania rozszerzenia.

Aktualizowanie pakietu .crx

Zaktualizuj plik .crx rozszerzenia, zwiększając numer wersji w pliku manifest.json.

{
  ...
  "version": "1.5",
  ...
  }
}
{
  ...
  "version": "1.6",
  ...
  }
}

Wróć na stronę zarządzania rozszerzeniami i kliknij przycisk SPAKUJ ROZSZERZENIE. Określ ścieżkę do katalogu rozszerzeń i lokalizację klucza prywatnego.

Aktualizowanie plików rozszerzeń

Na stronie pojawi się ścieżka do zaktualizowanego rozszerzenia w pakiecie.

Aktualizowanie plików rozszerzeń

Pakowanie za pomocą wiersza poleceń

Spakuj rozszerzenia w wierszu poleceń, wywołując chrome.exe. Użyj flagi --pack-extension, aby określić lokalizację folderu rozszerzenia, a flagi --pack-extension-key, aby określić lokalizację pliku klucza prywatnego rozszerzenia.

chrome.exe --pack-extension=C:\myext --pack-extension-key=C:\myext.pem

Hosting

Serwer, który hostuje pliki .crx, musi używać odpowiednich nagłówków HTTP, aby umożliwić użytkownikom zainstalowanie rozszerzenia przez kliknięcie linku.

Google Chrome uznaje plik za instalacyjny, jeśli spełniony jest jeden z tych warunków:

  • Plik ma typ treści application/x-chrome-extension
  • Sufiks pliku to .crx, a oba te warunki są spełnione:
    • Plik nie jest wyświetlany z nagłówkiem HTTP X-Content-Type-Options: nosniff
    • Plik jest udostępniany z jednym z tych typów treści:
    • pusty ciąg
    • „text/plain”
    • „application/octet-stream”
    • „unknown/unknown”
    • „application/unknown”
    • „*/*”

Najczęstszą przyczyną nierozpoznania pliku instalacyjnego jest to, że serwer wysyła nagłówek X-Content-Type-Options: nosniff. Drugą najczęstszą przyczyną jest to, że serwer wysyła nieznany typ treści, czyli taki, którego nie ma na poprzedniej liście. Aby rozwiązać problem z nagłówkiem HTTP, zmień konfigurację serwera lub spróbuj hostować plik .crx na innym serwerze.

Aktualizuję

Co kilka godzin przeglądarka sprawdza zainstalowane rozszerzenia pod kątem adresu URL aktualizacji. W przypadku każdego z nich wysyła żądanie na ten adres URL, aby znaleźć plik XML manifestu aktualizacji.

  • Treść zwracana przez sprawdzenie aktualizacji to dokument XML manifestu aktualizacji, który zawiera najnowszą wersję rozszerzenia.

Jeśli w pliku manifestu aktualizacji jest podana wersja nowsza niż zainstalowana, przeglądarka pobierze i zainstaluje nową wersję. Podobnie jak w przypadku aktualizacji ręcznych, nowy plik .crx musi być podpisany tym samym kluczem prywatnym co obecnie zainstalowana wersja.

Uwaga: aby chronić prywatność użytkownika, Google Chrome nie wysyła nagłówków plików cookie z żądaniami pliku manifestu automatycznej aktualizacji i ignoruje nagłówki Set-Cookie w odpowiedziach na te żądania.

URL aktualizacji

Rozszerzenia hostowane na serwerach poza Chrome Web Store muszą zawierać pole update_url w pliku manifest.json.

{
  "name": "My extension",
  ...
  "update_url": "https://myhost.com/mytestextension/updates.xml",
  ...
}

Aktualizowanie pliku manifestu

Manifest aktualizacji zwracany przez serwer powinien być dokumentem XML.

<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
  <app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
    <updatecheck codebase='https://myhost.com/mytestextension/mte_v2.crx' version='2.0' />
  </app>
</gupdate>

Ten format XML jest zapożyczony z formatu używanego przez Omahę, infrastrukturę aktualizacji Google. System rozszerzeń używa tych atrybutów w przypadku elementów <app><updatecheck> w pliku manifestu aktualizacji:

appidIdentyfikator rozszerzenia jest generowany na podstawie skrótu klucza publicznego, zgodnie z opisem w sekcji pakowanie. Identyfikator rozszerzenia jest wyświetlany na stronie zarządzania rozszerzeniami.
baza koduAdres URL HTTPS do pliku .crx.
wersjaUżywany przez klienta do określania, czy powinien pobrać plik .crx określony przez codebase. Powinna być zgodna z wartością „version” w pliku .crx w pliku manifest.json.

Plik XML manifestu aktualizacji może zawierać informacje o wielu rozszerzeniach, jeśli zawiera wiele elementów <app>.

Testowanie

Domyślna częstotliwość sprawdzania aktualizacji wynosi kilka godzin, ale można wymusić aktualizację, klikając przycisk Zaktualizuj rozszerzenia teraz na stronie zarządzania rozszerzeniami.

Aktualizuj rozszerzenia

Spowoduje to rozpoczęcie sprawdzania wszystkich zainstalowanych rozszerzeń.

Zaawansowane użycie: parametry żądania

Podstawowy mechanizm automatycznej aktualizacji został zaprojektowany tak, aby praca po stronie serwera była jak najprostsza. Wystarczy umieścić statyczny plik XML na dowolnym zwykłym serwerze WWW, takim jak Apache, i aktualizować ten plik XML, gdy pojawią się nowe wersje rozszerzenia.

Deweloperzy, którzy hostują wiele rozszerzeń, mogą sprawdzać parametry żądania, które wskazują identyfikator i wersję rozszerzenia w żądaniu aktualizacji. Uwzględnienie tych parametrów umożliwia aktualizowanie rozszerzeń z tego samego adresu URL, na którym działa dynamiczny kod po stronie serwera, zamiast ze statycznego pliku XML.

Format parametrów żądania jest następujący:

?x=EXTENSION_DATA

gdzie EXTENSION_DATA to zakodowany na potrzeby adresu URL ciąg znaków w formacie:

id=EXTENSION\_ID&v=EXTENSION\_VERSION

Na przykład 2 rozszerzenia wskazują ten sam adres URL aktualizacji (https://test.com/extension_updates.php):

  • Rozszerzenie 1
    • Identyfikator: „aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa”
    • Wersja: „1.1”
  • Rozszerzenie 2
    • ID: „bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb”
    • Wersja: „0.4”

Żądanie aktualizacji każdego rozszerzenia wyglądałoby tak:

https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1

i

https://test.com/extension_updates.php?x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4

W jednym żądaniu można podać wiele rozszerzeń dla każdego unikalnego adresu URL aktualizacji. W powyższym przykładzie, jeśli użytkownik ma zainstalowane oba rozszerzenia, 2 żądania zostaną połączone w 1:

https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1&x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4

Jeśli liczba zainstalowanych rozszerzeń korzystających z tego samego adresu URL aktualizacji jest wystarczająco duża, aby adres URL żądania GET był zbyt długi (ponad 2000 znaków), sprawdzanie aktualizacji wysyła dodatkowe żądania GET w razie potrzeby.

Zaawansowane użycie: minimalna wersja przeglądarki

Wraz z dodawaniem kolejnych interfejsów API do systemu rozszerzeń może zostać wydana zaktualizowana wersja rozszerzenia, która będzie działać tylko w nowszych wersjach przeglądarki. Chociaż Google Chrome jest aktualizowany automatycznie, może minąć kilka dni, zanim większość użytkowników zaktualizuje przeglądarkę do nowej wersji. Aby mieć pewność, że dana aktualizacja zostanie zastosowana tylko w przypadku wersji Google Chrome nowszych niż określona wersja lub jej równych, dodaj atrybut „prodversionmin” do elementu w odpowiedzi na aktualizację.

<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
  <app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
    <updatecheck codebase='http://myhost.com/mytestextension/mte_v2.crx' version='2.0' prodversionmin='3.0.193.0'/>
  </app>
</gupdate>

Dzięki temu użytkownicy będą mogli automatycznie zaktualizować Chrome do wersji 2 tylko wtedy, gdy korzystają z Google Chrome w wersji 3.0.193.0 lub nowszej.