Instalowanie rozszerzeń w systemie Linux

Rozszerzenia hostowane poza Chrome Web Store mogą instalować tylko użytkownicy systemu Linux. Z tego artykułu dowiesz się, jak spakować, hostować i aktualizować pliki .crx na serwerze osobistym. Jeśli rozpowszechniasz rozszerzenie lub motyw tylko w Chrome Web Store, zapoznaj się z artykułem na temat hostowania i aktualizowania Web Store.

Sposób prezentacji

Rozszerzenia i motywy są wyświetlane jako pliki .crx. Podczas przesyłania za pomocą panelu programisty Chrome panel automatycznie tworzy plik .crx. Jeśli plik .crx został opublikowany na serwerze osobistym, musisz go utworzyć lokalnie lub pobrać z Chrome Web Store.

Pobierz plik .crx z Chrome Web Store

Jeśli rozszerzenie jest hostowane w Chrome Web Store, plik .crx można pobrać z panelu dewelopera. Odszukaj rozszerzenie w sekcji „Twoje informacje o firmie” i kliknij „Więcej informacji”. W wyskakującym okienku kliknij niebieski link main.crx, aby pobrać aplikację.

Pobierz plik .crx z Panelu dewelopera

Pobrany plik może być przechowywany na osobistym serwerze. Jest to najbezpieczniejszy sposób przechowywania rozszerzenia lokalnie, ponieważ jego zawartość będzie podpisana przez Chrome Web Store. Pomaga to w wykrywaniu potencjalnych ataków i manipulacji.

Tworzenie pliku .crx lokalnie

Katalogi rozszerzeń są konwertowane na pliki .crx na stronie zarządzania rozszerzeniami. Otwórz chrome://extensions/ w ominiboksie lub kliknij menu Chrome, najedź kursorem na „Więcej narzędzi” i wybierz „Rozszerzenia”.

Na stronie zarządzania rozszerzeniami włącz tryb programisty, klikając przełącznik obok Trybu programisty. Następnie kliknij przycisk PAKIET ROZSZERZENIA.

Tryb programisty jest zaznaczony, a następnie kliknij opcję Spakuj rozszerzenie

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

Podaj ścieżkę rozszerzenia, a następnie kliknij Pakiet rozszerzeń

Chrome utworzy 2 pliki – .crx i .pem, które będą zawierać klucz prywatny rozszerzenia.

Spakowane pliki rozszerzeń

Nie trać klucza prywatnego. Przechowuj plik .pem w bezpiecznym i bezpiecznym miejscu. Będzie trzeba go zaktualizować rozszerzenie.

Aktualizowanie pakietu .crx

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

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

Wróć na stronę zarządzania rozszerzeniami i kliknij przycisk PAKIET ROZSZERZENIA. Podaj ścieżkę do katalogu rozszerzeń i lokalizację klucza prywatnego.

Aktualizowanie plików rozszerzeń

Na stronie będzie podana ścieżka do zaktualizowanego rozszerzenia w pakiecie.

Aktualizowanie plików rozszerzeń

Pakiet przy użyciu wiersza poleceń

Rozszerzenia pakietów w wierszu poleceń przez wywołanie 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 hostujący 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 możliwy do zainstalowania, jeśli spełniony jest dowolny z tych warunków:

  • Plik ma typ treści application/x-chrome-extension
  • Sufiks pliku to .crx i oba te warunki są prawdziwe:
    • Plik nie jest udostępniany 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"
    • „nieznane/nieznane”
    • „aplikacja/nieznana”
    • "*/*"

Najczęstszą przyczyną nierozpoznania pliku możliwego do zainstalowania jest wysłanie przez serwer nagłówka X-Content-Type-Options: nosniff. Drugą najczęstszą przyczyną jest wysyłanie przez serwer nieznanego typu treści – spoza poprzedniej listy. Aby rozwiązać problem z nagłówkiem HTTP, zmień konfigurację serwera lub umieść plik .crx na innym serwerze.

Aktualizuję

Co kilka godzin przeglądarka sprawdza, czy zainstalowane rozszerzenia znajdują się w poszukiwaniu adresu URL aktualizacji. W przypadku każdego z nich wysyła na niego żądanie w poszukiwaniu pliku XML manifestu aktualizacji.

  • Podczas sprawdzania dostępności aktualizacji zwracana jest zawartość dokumentu XML manifestu aktualizacji, który zawiera najnowszą wersję rozszerzenia.

Jeśli plik manifestu aktualizacji zawiera nowszą wersję niż zainstalowana, przeglądarka pobierze i zainstaluje nową wersję. Tak 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żytkowników, Google Chrome nie wysyła żadnych nagłówków plików cookie z żądaniami pliku manifestu automatycznej aktualizacji i ignoruje nagłówki Set-Cookie w odpowiedziach na te żądania.

Zaktualizuj URL

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

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

Zaktualizuj plik manifestu

Plik manifestu aktualizacji zwrócony 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 pochodzi z formatu używanego przez Omaha – infrastrukturę aktualizacji Google. System rozszerzeń używa tych atrybutów do elementów <app> i <updatecheck> w pliku manifestu aktualizacji:

appidIdentyfikator rozszerzenia jest generowany na podstawie hasz klucza publicznego, zgodnie z opisem w sekcji opakowania. Identyfikator rozszerzenia jest wyświetlany na stronie zarządzania rozszerzeniami.
baza koduAdres URL HTTPS pliku .crx.
WersjaUżywana przez klienta do określenia, czy należy pobrać plik .crx określony przez codebase. Powinna ona odpowiadać wartości parametru „version” w pliku manifest.json w pliku .crx.

Plik XML manifestu aktualizacji może zawierać informacje o wielu rozszerzeniach przez uwzględnienie wielu elementów <app>.

Testowanie

Domyślna częstotliwość sprawdzania dostępności aktualizacji wynosi kilka godzin, ale aktualizację można wymusić za pomocą przycisku Zaktualizuj rozszerzenia teraz na stronie zarządzania rozszerzeniami.

Aktualizuj rozszerzenia teraz

Rozpocznie się sprawdzanie wszystkich zainstalowanych rozszerzeń.

Zaawansowane użycie: parametry żądania

Podstawowy mechanizm automatycznych aktualizacji został zaprojektowany tak, aby działanie po stronie serwera było tak proste, jak to było przez upuszczenie statycznego pliku XML na zwykłym serwerze WWW, takim jak Apache, i aktualizowanie tego pliku w miarę pojawiania się nowych wersji rozszerzeń.

Deweloperzy hostujący 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 z dynamicznym kodem po stronie serwera zamiast statycznego pliku XML.

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

?x=EXTENSION_DATA

Gdzie EXTENSION_DATA to zakodowany adres URL ciąg 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: „aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa”
    • Wersja: „1.1”
  • Rozszerzenie 2
    • Identyfikator: „bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb”
    • Wersja: „0.4”

Prośba o zaktualizowanie każdego z poszczególnych rozszerzeń mogłaby wyglądać 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 umieścić wiele rozszerzeń dla każdego unikalnego adresu URL aktualizacji. W podanym wyżej przykładzie, jeśli użytkownik ma zainstalowane oba rozszerzenia, żądania te zostaną scalone w jedno żądanie:

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 dostatecznie duża, że URL żądania GET jest za długi (około 2000 znaków), sprawdzanie aktualizacji wysyła w razie potrzeby dodatkowe żądania GET.

Zaawansowane użycie: minimalna wersja przeglądarki

W miarę dodawania do systemu rozszerzeń interfejsów API może zostać wydana zaktualizowana wersja rozszerzenia, które będzie działać tylko z nowszymi wersjami przeglądarki. Przeglądarka Google Chrome jest automatycznie aktualizowana, ale aktualizacja wszystkich wersji systemu przez większość użytkowników może potrwać kilka dni. Aby mieć pewność, że dana aktualizacja zostanie zastosowana tylko do wersji Google Chrome równych lub wyższych niż konkretna wersja, dodaj atrybut „prodversionmin” do elementu w odpowiedzi na żądanie aktualizacji.

<?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 korzystający z przeglądarki Google Chrome 3.0.193.0 lub nowszej będą automatycznie aktualizowali ją do wersji 2.