Googlebook OS to system operacyjny dla urządzeń Googlebook, oparty na stosie technologicznym Androida i połączony z podstawami komputerowymi z ChromeOS. Googlebooks obsługuje tę samą platformę WebExtensions, która jest dostępna w systemach Windows, macOS i ChromeOS, ale sposób jej działania w tych systemach jest nieco inny.
- Wykrywanie platformy jest rzadko potrzebne, ale istniejące sprawdzenia mogą działać nieprawidłowo, ponieważ interfejsy API rozszerzeń zgłaszają
android, a klient użytkownika zgłasza ChromeOS. - Wiadomości natywne nie są jeszcze dostępne, ale pracujemy nad tym. Oczekuj, że będzie kierować wiadomości do zainstalowanej aplikacji na Androida, a nie do pliku wykonywalnego na komputerze.
- Skróty klawiszowe używają wiązań klawiszy Linuxa zamiast wpisów
chromeos. SharedArrayBufferwymaga włączenia izolacji od zasobów z innych domen i musi działać na stronie rozszerzenia lub w dokumencie poza ekranem, a nie w skrypcie service worker.- Interfejsy API tylko dla ChromeOS nie są obsługiwane w Googlebook OS, mimo że ciąg klienta użytkownika zgłasza
Chrome OS. Rozszerzenia, które deklarują te uprawnienia, nadal są instalowane, ale przestrzenie nazw interfejsu API sąundefinedw czasie działania. browser.system.storagenie jest obsługiwany w Googlebook OS, więc przestrzeń nazw interfejsu API toundefinedw czasie działania.
Wykrywanie platformy
Większość rozszerzeń nie musi wykrywać systemu operacyjnego Googlebook OS. Stosuj standardowe sprawdzone metody tworzenia stron internetowych, takie jak wykrywanie funkcji i projektowanie responsywne, zamiast sprawdzać, w jakim systemie operacyjnym działa przeglądarka.
Jeśli rozszerzenie sprawdza już system operacyjny, interfejsy API rozszerzeń i ciąg znaków agenta użytkownika zwracają różne platformy w systemie operacyjnym Googlebook.
chrome.runtime.getPlatformInfo().oszwraca'android'. Jeśli rozszerzenie udostępnia kod przeglądarkom mobilnym i zakłada, że'android'oznacza telefon, użytkownicy Googlebooka będą widzieć interfejs mobilny na laptopie.navigator.userAgentzawieraCrOS. W przypadku ogólnego układu strony dobrze sprawdza się Chromebook. Jednaknavigator.userAgentData.platformzwraca'Android', a jeśli rozszerzenie sprawdza ciąg User-Agent, aby wyświetlać wskazówki dotyczące skrótów klawiszowych ChromeOS (np. klawiszaSearch) lub wywoływać interfejsy API dostępne tylko w ChromeOS, te sprawdzenia będą działać nieprawidłowo na urządzeniu Googlebook.
Tabela poniżej zawiera porównanie tych sygnałów na różnych platformach.
| Sygnał | Googlebook OS. | Telefon z Androidem | Chromebook | Windows, macOS, Linux |
|---|---|---|---|---|
runtime.getPlatformInfo().os |
android |
android |
cros |
mac, win, linux |
navigator.userAgentData.platform |
Android |
Android |
Chrome OS |
Windows, macOS, Linux |
navigator.userAgentData.mobile |
false |
true |
false |
false |
Natomiast navigator.userAgent zwraca identyczny skrócony ciąg znaków klienta użytkownika zarówno w przypadku Googlebook OS, jak i ChromeOS, ponieważ obie platformy zgłaszają zamrożony token platformy X11; CrOS x86_64
14541.0.0.
// Googlebook OS
Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/157.0.0.0 Safari/537.36
// ChromeOS
Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/157.0.0.0 Safari/537.36
Podobnie jak w przypadku wszystkich działań związanych z tworzeniem stron internetowych wykrywanie platformy może być zawodne, dlatego używaj go tylko wtedy, gdy nie możesz użyć wykrywania funkcji do bezpośredniego testowania tego, czego potrzebujesz. Jeśli musisz odróżnić Googlebook OS od telefonu z Androidem i Chromebooka, możesz to zrobić, łącząc runtime.getPlatformInfo() z wskazówką mobile z interfejsu User-Agent Client Hints.
async function getPlatform() {
const { os, arch } = await chrome.runtime.getPlatformInfo();
// userAgentData is undefined in browsers that don't implement User-Agent
// Client Hints, so read mobile defensively.
const mobile = navigator.userAgentData?.mobile;
return {
os,
arch,
isGooglebook: os === 'android' && mobile === false,
isPhone: os === 'android' && mobile !== false
};
}
Chociaż ta konkretna kombinacja porównań ciągów znaków w momencie wprowadzenia produktu na rynek jednoznacznie wskazuje na urządzenia z Googlebook OS, nie zawsze tak musi być. W miarę upływu czasu i wprowadzania na rynek coraz większej liczby urządzeń w różnych formach może się zdarzyć, że niektóre urządzenia z Googlebook OS nie będą pasować do tego wykrywania.
Aby wykrywać Googlebooki na stronach internetowych lub na serwerze za pomocą wskazówek klienta, zapoznaj się z sekcją Identyfikowanie Googlebooków.
Natywne przesyłanie komunikatów
Wiadomości natywne nie są jeszcze dostępne w systemie operacyjnym Googlebook OS, ale pracujemy nad tym. Oczekuj, że będzie zawierać rozszerzenia komunikujące się z zainstalowanymi aplikacjami na Androida, a nie lokalnymi plikami wykonywalnymi na komputerze. Obecnie rozszerzenia, które deklarują uprawnienie nativeMessaging, nadal instalują się i działają w Googlebook OS, ale próby połączenia kończą się niepowodzeniem. Upewnij się, że rozszerzenie prawidłowo obsługuje błędy połączenia i w przypadku niedostępności hosta natywnego przełącza się na przepływ pracy oparty na internecie. Obserwuj problem
555299632, aby otrzymywać aktualizacje.
Skróty klawiszowe
Skróty commands działają tak samo jak w Chrome na Linuksa. Chrome odczytuje wpis linux w suggested_key w systemie Googlebook OS, więc skróty zdefiniowane w chromeos nie mają zastosowania. Kombinacje klawiszy Search również nie działają, ponieważ na urządzeniach z systemem Googlebook OS nie ma klawisza „Szukaj”.
SharedArrayBuffer
W systemach Windows, macOS, Linux i ChromeOS rozszerzenia mogą używać SharedArrayBuffer
automatycznie w dowolnym kontekście. W systemie operacyjnym Googlebook OS rozszerzenia muszą wyraźnie zgodzić się na izolację od zasobów z innych domen w manifest.json, aby używać SharedArrayBuffer.
Włączenie izolacji zasobów z innych domen umożliwia korzystanie z SharedArrayBuffer w dokumentach rozszerzenia, takich jak wyskakujące okienka, strony opcji i dokumenty poza ekranem. Nie włącza jednak SharedArrayBuffer w skryptach service worker rozszerzeń, ponieważ Chrome nie obsługuje jeszcze izolacji między źródłami w przypadku skryptów service worker (problem 40150182). Jeśli logika w tle opiera się na SharedArrayBuffer (np. do uruchamiania wielowątkowego WebAssembly), uruchamiaj ten kod w dokumencie poza ekranem zamiast w skrypcie service worker.
Interfejsy API tylko w ChromeOS
Interfejsy API oznaczone w dokumentacji interfejsów API rozszerzeń Chrome jako tylko ChromeOS (np. documentScan, fileSystemProvider, vpnProvider i printing) nie są obsługiwane w Googlebook OS, mimo że navigator.userAgent zawiera CrOS. Rozszerzenia, które deklarują te uprawnienia, nadal będą się instalować i działać, ale przestrzenie nazw interfejsu API będą w czasie działania undefined. Przed wywołaniem przestrzeni nazw interfejsu API sprawdź, czy ona istnieje, zamiast polegać na wykrywaniu agenta użytkownika.
browser.system.storage
Interfejs browser.system.storage API nie jest obsługiwany w systemie Googlebook OS. Rozszerzenia, które deklarują uprawnienie system.storage w manifest.json, nadal będą się instalować i uruchamiać, ale przestrzeń nazw będzie w czasie działania miała wartość undefined. Przed wywołaniem funkcji getInfo(), ejectDevice() lub zarejestrowaniem odbiorników pamięci sprawdź, czy interfejs API jest zdefiniowany.