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.
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.
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.
Chrome utworzy 2 pliki: plik .crx
i plik .pem
, który zawiera klucz prywatny rozszerzenia.
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.
Na stronie znajdziesz ścieżkę do zaktualizowanego rozszerzenia w pakiecie.
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"
"\*/\*"
- Plik nie jest udostępniany z nagłówkiem HTTP
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.
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 przezcodebase
. Powinna ona odpowiadać wartości parametru „version” w plikumanifest.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.
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.