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