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ę.
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.
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.
Chrome utworzy 2 pliki – .crx
i .pem
, które będą zawierać klucz prywatny rozszerzenia.
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.
Na stronie będzie podana ścieżka do zaktualizowanego rozszerzenia w pakiecie.
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”
- "*/*"
- Plik nie jest udostępniany z nagłówkiem HTTP
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.
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:
appid | Identyfikator 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 kodu | Adres URL HTTPS pliku .crx . |
Wersja | Uż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.
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
<?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.