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 spakować, hostować i aktualizować crx z serwera WWW ogólnego przeznaczenia. Jeśli dystrybuujesz tylko rozszerzenie lub motyw w Chrome Web Store zapoznaj się z artykułem Hosting w sklepie Chrome Web Store aktualizacji.

Pakiet

Rozszerzenia i motywy są wyświetlane jako pliki .crx. W przypadku przesyłania za pomocą programisty Chrome , zostanie automatycznie utworzony plik crx. Jeśli opublikowano na serwerze osobistym, musisz utworzyć plik crx lokalnie lub pobrać go z Chrome 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 Panel dewelopera. Znajdź rozszerzenie w sekcji „Twoje informacje o produktach”. i kliknij „Więcej informacji”. W kliknij niebieski link main.crx, aby pobrać aplikację.

Pobierz plik .crx z panelu programisty

Pobrany plik może być przechowywany na serwerze osobistym. To najbezpieczniejszy sposób hostowania lokalnie, ponieważ zawartość rozszerzenia będzie podpisana przez Chrome Web Store. Ten pomaga wykrywać potencjalne ataki i manipulacje.

Utwórz plik .crx lokalnie

Katalogi rozszerzeń są konwertowane na pliki .crx na stronie zarządzania rozszerzeniami. Nawiguj do chrome://extensions/ w omniboksie lub kliknij menu Chrome i przytrzymaj wskaźnik nad „Więcej narzędzi” a następnie kliknij „Rozszerzenia”.

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

Zaznaczono tryb programisty i kliknij Dodaj rozszerzenie

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

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

Chrome utworzy dwa pliki: .crx i .pem, które zawierają treść klucz prywatny.

Spakowane pliki rozszerzeń

Nie trać klucza prywatnego. Przechowuj plik .pem w bezpiecznym i bezpiecznym miejscu. będzie potrzebne do zaktualizowania rozszerzenia.

Aktualizowanie pakietu .crx

Aby zaktualizować plik .crx rozszerzenia, zwiększ numer wersji w narzędziu manifest.json.

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

Wróć na stronę zarządzania rozszerzeniami i kliknij przycisk SPAKUJ ROZSZERZENIE. Podaj wartość ścieżki do katalogu rozszerzeń i lokalizacji klucza prywatnego.

Aktualizowanie plików rozszerzeń

Na stronie znajdziesz ścieżkę do zaktualizowanego pakietu.

Aktualizowanie plików rozszerzeń

Pakiet przez wiersz poleceń

Rozszerzenia pakietów w wierszu poleceń przez wywołanie chrome.exe. Użyj funkcji --pack-extension flagę pozwalającą określić lokalizację folderu rozszerzenia oraz flagę --pack-extension-key do określ 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 klikając odpowiedni link.

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

  • Typ treści pliku to 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 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ą braku rozpoznania pliku z możliwością zainstalowania jest to, że serwer wysyła nagłówek X-Content-Type-Options: nosniff. Drugim najczęstszym powodem jest to, że serwer wysyła wiadomość nieznany typ treści – taki, którego nie ma na poprzedniej liście. Aby rozwiązać problem z nagłówkiem HTTP, zmień jedną z tych opcji: musisz zmienić konfigurację serwera, albo spróbować przechowywać plik .crx na innym serwerze.

Aktualizuj

Przeglądarka co kilka godzin sprawdza zainstalowane rozszerzenia pod kątem adresu URL aktualizacji. W przypadku każdego z nich do tego adresu URL w poszukiwaniu pliku XML manifestu aktualizacji.

  • Treść zwracana przez sprawdzanie dostępności aktualizacji to dokument XML pliku manifestu aktualizacji zawierający najnowsze wersji rozszerzenia.

Jeśli plik manifestu aktualizacji zawiera informację o wersji nowszej niż zainstalowana, przeglądarka pobierze i zainstaluje nową wersję. Tak jak w przypadku aktualizacji ręcznych, nowy plik .crx musi być podpisany z tym samym kluczem prywatnym co obecnie zainstalowana 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 poza Chrome Web Store muszą zawierać pole update_url w swój plik manifest.json.

{
  "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>

Format XML został zapożyczony z formatu używanego przez Omaha, infrastrukturę aktualizacji Google. system rozszerzeń korzysta z tych atrybutów dla elementów <app> i <updatecheck>: Zaktualizuj plik manifestu:

appid
Identyfikator rozszerzenia jest generowany na podstawie hasza klucza publicznego, zgodnie z opisem w sekcji opakowanie. Identyfikator rozszerzenia jest wyświetlany na stronie zarządzania rozszerzeniami.
baza kodu
Adres URL HTTPS pliku .crx.
wersja
Używane przez klienta do określenia, czy powinien pobrać plik .crx określony przez codebase. Wartość powinna być zgodna z wartością „version” w pliku manifest.json pliku .crx.

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

Testowanie

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

Aktualizuj rozszerzenia teraz

Spowoduje to rozpoczęcie sprawdzania wszystkich zainstalowanych rozszerzeń.

Zaawansowane zastosowania: parametry żądania

Podstawowy mechanizm automatycznej aktualizacji został zaprojektowany tak, aby po stronie serwera można było w prosty sposób statycznego pliku XML na dowolny zwykły serwer WWW, np. Apache, i aktualizowanie go jako nowego wersji rozszerzenia.

Deweloperzy hostujący wiele rozszerzeń mogą sprawdzać parametry żądań, które wskazują identyfikator rozszerzenia i jej wersji w żądaniu aktualizacji. Dzięki dodaniu tych parametrów rozszerzenia mogą aktualizować się z ten sam adres URL z dynamicznym kodem 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: „aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa”
    • Wersja: „1.1”
  • Rozszerzenie 2
    • Identyfikator: „bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb”
    • Wersja: „0.4”

Żądanie zaktualizowania poszczególnych rozszerzeń wyglądałoby wtedy 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 jednej prośbie dla każdego unikalnego adresu URL aktualizacji można podać wiele rozszerzeń. Dla poprzedniego na przykład jeśli użytkownik ma zainstalowane oba rozszerzenia, żądania te zostaną scalone w pojedyncze żą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 dostatecznie duża, by wysłać żądanie GET URL jest za długi (ponad 2000 znaków), podczas sprawdzania aktualizacji dostępne są dodatkowe żądania GET, niezbędną.

Zaawansowane użycie: minimalna wersja przeglądarki

W miarę dodawania do systemu rozszerzeń kolejnych interfejsów API będziemy aktualizować nową wersję rozszerzenia, które będzie działać tylko w nowszych wersjach tej przeglądarki. Przeglądarka Google Chrome jest automatycznie aktualizowana, Zanim większość użytkowników zostanie zaktualizowana do nowej wersji, może minąć kilka dni. Do upewnij się, że dana aktualizacja będzie miała zastosowanie tylko do Google Chrome w wersji na poziomie lub wyższym dodaj parametr „prodversionmin” do elementu <app> 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 będą automatycznie aktualizowali się do wersji 2 tylko w przeglądarce Google Chrome. 3.0.193.0 lub nowsza.