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 na serwerze WWW ogólnego przeznaczenia. Jeśli rozpowszechniasz rozszerzenie lub motyw wyłącznie w Chrome Web Store, zapoznaj się z informacjami o hostowaniu i aktualizowaniu Web Store.

Pakiet

Rozszerzenia i motywy są wyświetlane jako pliki .crx. Podczas przesyłania za pomocą panelu dewelopera 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żesz 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 serwerze osobistym. Jest to najbezpieczniejszy sposób lokalnego hostowania rozszerzenia, 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 omniboksie 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 Pakiet kliknięć

Podaj ścieżkę do folderu rozszerzenia w polu Katalog główny rozszerzenia, a następnie kliknij przycisk ROZSZERZENIE PAKIETU. W przypadku pakietu tworzonego po raz pierwszy zignoruj pole Klucz prywatny.

Podaj ścieżkę rozszerzenia, a następnie kliknij Dodaj rozszerzenie

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

Spakowane pliki rozszerzeń

Nie utrać 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 ROZSZERZENIA PAKIETU. Podaj ścieżkę do katalogu rozszerzeń i lokalizację klucza prywatnego.

Aktualizowanie plików rozszerzeń

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

Aktualizowanie plików rozszerzeń

Tworzenie pakietu za pomocą wiersza poleceń

Rozszerzenia pakietów w wierszu poleceń przez wywołanie chrome.exe. Użyj flagi --pack-extension, aby określić lokalizację folderu rozszerzenia, i 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 użytkownicy mogli zainstalować rozszerzenie przez kliknięcie linku.

Google Chrome uznaje plik za możliwy do zainstalowania, jeśli jest spełniony jeden z tych warunków:

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

Najczęstszą przyczyną problemów z rozpoznawaniem pliku z możliwością 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 spróbuj umieścić plik .crx na innym serwerze.

Aktualizuj

Co kilka godzin przeglądarka sprawdza, czy zainstalowane rozszerzenia mają adres URL aktualizacji. Każdy z nich wysyła żądanie na dany adres URL w poszukiwaniu pliku XML manifestu aktualizacji.

  • Podczas sprawdzania dostępności aktualizacji zwracany jest dokument XML manifestu aktualizacji zawierający najnowszą wersję rozszerzenia.

Jeśli w pliku manifestu aktualizacji jest podana nowsza wersja niż zainstalowana, przeglądarka pobierze i zainstaluje nową. 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ą zawierać w pliku manifest.json pole update_url.

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

Zaktualizuj plik manifestu

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

appid
Identyfikator rozszerzenia jest generowany na podstawie skrótu klucza publicznego, zgodnie z opisem w pakiecie. Identyfikator rozszerzenia jest wyświetlany na stronie zarządzania rozszerzeniami.
baza kodu
Adres URL HTTPS prowadzący do pliku .crx.
wersja
Używane przez klienta do określenia, czy należy pobrać plik .crx określony przez codebase. Powinna odpowiadać wartości parametru „version” w pliku manifest.json pliku .crx.

Plik XML manifestu aktualizacji może zawierać informacje o wielu rozszerzeniach dzięki wielu elementom <app>.

Testowanie

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

Uaktualnij rozszerzenia teraz

Spowoduje to rozpoczęcie sprawdzania wszystkich zainstalowanych rozszerzeń.

Zastosowanie zaawansowane: parametry żądania

Podstawowy mechanizm automatycznej aktualizacji został zaprojektowany tak, aby działanie po stronie serwera było tak proste, jak umieszczenie 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ą w żądaniu aktualizacji identyfikator i wersję rozszerzenia. Dodanie 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 jest ciągiem zakodowanym na potrzeby adresu URL w formacie:

id=EXTENSION_ID&v=EXTENSION_VERSION

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

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

Prośba o aktualizację każdego z pojedynczych rozszerzeń wyglądałaby 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 dla każdego unikalnego adresu URL aktualizacji może być wymienionych wiele rozszerzeń. W poprzednim 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ń z tym samym adresem URL aktualizacji jest wystarczająco duża, aby adres URL żądania GET był zbyt długi (ponad 2000 znaków), podczas sprawdzania aktualizacji wysyła w razie potrzeby dodatkowe żądania GET.

Zaawansowane użycie: minimalna wersja przeglądarki

W miarę dodawania kolejnych interfejsów API do systemu rozszerzeń może pojawić się zaktualizowana wersja rozszerzenia, które będzie działać tylko z nowszymi wersjami przeglądarki. Przeglądarka Google Chrome jest aktualizowana automatycznie, ale aktualizacja wszystkich wersji przez większość użytkowników może potrwać kilka dni. Aby mieć pewność, że dana aktualizacja zostanie zastosowana tylko do wersji Google Chrome w wersji konkretnej lub wyższej, dodaj atrybut „prodversionmin” do elementu <app> 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, którzy używają Google Chrome 3.0.193.0 lub nowszej wersji, zostaną automatycznie zaktualizowani do wersji 2.