Własny host w systemie Linux

Linux to jedyna platforma, na której użytkownicy Chrome mogą instalować rozszerzenia hostowane poza Chrome Web Store. Z tego artykułu dowiesz się, jak pakować, hostować i aktualizować pliki crx z serwera WWW ogólnego przeznaczenia. Jeśli rozpowszechniasz rozszerzenie lub motyw wyłącznie w Chrome Web Store, zapoznaj się z informacjami na temat hostowania i aktualizowania w sklepie Web Store.

Pakiet

Rozszerzenia i motywy są dostarczane jako pliki .crx. Podczas przesyłania za pomocą panelu dewelopera Chrome panel automatycznie tworzy plik crx. Jeśli opublikowano go na osobistym serwerze, plik crx należy utworzyć lokalnie lub pobrać z Chrome Web Store.

Pobieranie pliku .crx ze sklepu 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 informacje” 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że być hostowany na osobistym serwerze. Jest to najbezpieczniejszy sposób hostowania rozszerzenia lokalnie, ponieważ zawartość rozszerzenia będzie podpisana przez Chrome Web Store. Pomaga to wykrywać potencjalne ataki i manipulowanie treściami.

Tworzenie pliku .crx lokalnie

Katalogi rozszerzeń są konwertowane na pliki .crx na stronie zarządzania rozszerzeniami. W polu wyszukiwania kliknij chrome://extensions/ lub otwórz 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 SPAKUJ ROZSZERZENIE.

Zaznaczono tryb programisty i kliknij Dodaj rozszerzenie

W polu Katalog główny rozszerzenia podaj ścieżkę do folderu rozszerzenia, a potem kliknij przycisk ZAPISZ ROZSZERZENIE. W przypadku pakietu na początek ignoruj pole Klucz prywatny.

Określ ścieżkę rozszerzenia, a potem kliknij Pack Extension

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

Pakowane pliki rozszerzeń

Nie zgub klucza prywatnego! Plik .pem przechowuj w tajnym i bezpiecznym miejscu. 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 ZAPISZ ROZSZERZENIE. Podaj ścieżkę do katalogu rozszerzeń i lokalizację klucza prywatnego.

Aktualizowanie plików rozszerzeń

Na stronie znajdziesz ścieżkę do zaktualizowanego rozszerzenia w pakiecie.

Aktualizowanie plików rozszerzeń

Pakowanie za pomocą wiersza poleceń

Pakuj 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

Host

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 uważa, że plik można zainstalować, jeśli jedno z tych warunków jest spełnione:

  • Typ treści pliku to application/x-chrome-extension
  • Rozszerzenie pliku to .crx i oba z tych warunków są spełnione:
    • Plik nie jest udostępniany z nagłówkiem HTTP X-Content-Type-Options: nosniff
    • Plik jest wyświetlany w ramach jednego z tych typów treści:
    • pusty ciąg
    • "text/plain"
    • "application/octet-stream"
    • "unknown/unknown"
    • "application/unknown"
    • "\*/\*"

Najczęstszą przyczyną nierozpoznania pliku instalowanego 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, który nie znajduje się 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, czy zainstalowane rozszerzenia mają adres URL aktualizacji. W przypadku każdego z nich wysyła żądanie do tego adresu URL, aby znaleźć plik XML z aktualizacją.

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

Jeśli manifest aktualizacji zawiera wersję nowszą niż zainstalowana, przeglądarka pobiera i instaluje nową wersję. Podobnie jak w przypadku ręcznych aktualizacji nowy plik .crx musi być podpisany tym samym kluczem prywatnym co bieżąca wersja.

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

Aktualizuj URL

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

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

Aktualizacja pliku manifestu

Manifest aktualizacji zwracany przez serwer powinien być plikiem 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 został zapożyczony z infrastruktury aktualizacji Omaha firmy Google. System rozszerzeń używa tych atrybutów elementów <app> i <updatecheck> pliku manifestu aktualizacji:

appid
Identyfikator rozszerzenia jest generowany na podstawie hasza klucza publicznego, zgodnie z opisem w sekcji pakowanie. Identyfikator rozszerzenia jest wyświetlany na stronie zarządzania rozszerzeniami.
baza kodu
Adres URL HTTPS do pliku .crx.
wersja
Używany przez klienta do określenia, czy ma pobrać plik .crx określony przez codebase. Powinna ona odpowiadać wartości parametru „version” w pliku manifest.json pliku .crx.

Plik XML manifestu aktualizacji może zawierać informacje o wielu rozszerzeniach, używając wielu elementów <app>.

Testowanie

Domyślna częstotliwość sprawdzania dostępności aktualizacji wynosi kilka godzin, ale aktualizacja może zostać wymuszona przy użyciu przycisku Aktualizuj rozszerzenia teraz na stronie zarządzania rozszerzeniami.

Aktualizuj rozszerzenia teraz

Spowoduje to rozpoczęcie sprawdzania wszystkich zainstalowanych rozszerzeń.

Zaawansowane korzystanie z usługi: parametry żądania

Podstawowy mechanizm automatycznej aktualizacji został zaprojektowany tak, aby ułatwić działanie po stronie serwera. Wystarczy tylko upuścić statyczny plik XML na dowolny zwykły serwer WWW, np. Apache i zaktualizować ten plik XML wraz z udostępnieniem 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 aktualizację rozszerzeń z tego samego adresu URL, który zawiera dynamiczny kod po stronie serwera, zamiast statycznego pliku XML.

Format parametrów żądania:

?x=EXTENSION_DATA

Gdzie EXTENSION_DATA to zakodowany w adresie 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: „aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa”
    • Wersja: „1.1”.
  • Rozszerzenie 2
    • Identyfikator: „bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb”
    • Wersja: „0.4”

Prośba o zaktualizowanie każdego rozszerzenia:

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 poprzednim przykładzie, jeśli użytkownik ma zainstalowane oba rozszerzenia, są one łączone w jedno:

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

Jeśli liczba zainstalowanych rozszerzeń z tym samym adresem URL aktualizacji jest dostatecznie duża, że URL żądania GET jest zbyt długi (ponad 2000 znaków), funkcja sprawdzania aktualizacji w razie potrzeby wysyła dodatkowe żądania GET.

Zaawansowane użycie: minimalna wersja przeglądarki

W miarę dodawania do systemu rozszerzeń kolejnych interfejsów API może zostać wydana zaktualizowana wersja rozszerzenia, która będzie działać tylko w nowszych wersjach przeglądarki. Chociaż sama przeglądarka Google Chrome jest aktualizowana automatycznie, może minąć kilka dni, zanim większość użytkowników zaktualizuje ją do danej nowej wersji. Aby mieć pewność, że dana aktualizacja będzie dotyczyć tylko wersji Google Chrome, które są równe lub nowsze od określonej wersji, do elementu <app> w odpowiedzi na aktualizację dodaj atrybut „prodversionmin”.

<?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ą automatycznie aktualizowali się do wersji 2 tylko w przeglądarce Google Chrome 3.0.193.0 lub nowszej.