Googlebook OS è un sistema operativo per i dispositivi Googlebook, basato sullo stack tecnologico di Android e abbinato alle basi del desktop di ChromeOS. Googlebooks supporta la stessa piattaforma WebExtensions disponibile su Windows, macOS e ChromeOS, ma il funzionamento è leggermente diverso.
- Il rilevamento della piattaforma è raramente necessario, ma i controlli esistenti possono
non funzionare correttamente perché le API delle estensioni segnalano
androidmentre lo user agent segnala ChromeOS. - La messaggistica nativa non è ancora disponibile, ma è in fase di sviluppo. Prevedi che i messaggi vengano indirizzati a un'app per Android installata anziché a un eseguibile desktop.
- Le scorciatoie da tastiera utilizzano le combinazioni di tasti di Linux anziché le voci
chromeos. SharedArrayBufferrichiede l'attivazione dell'isolamento multiorigine e deve essere eseguito in una pagina di estensione o in un documento offscreen anziché in un service worker.- Le API solo per ChromeOS non sono supportate su Googlebook OS,
anche se lo user agent segnala
Chrome OS. Le estensioni che dichiarano queste autorizzazioni vengono comunque installate, ma gli spazi dei nomi API sonoundefinedin fase di runtime. browser.system.storagenon è supportato su Googlebook OS, quindi lo spazio dei nomi API èundefinedin fase di runtime.
Rilevamento della piattaforma
La maggior parte delle estensioni non ha bisogno di rilevare Googlebook OS. Segui le best practice standard per lo sviluppo web, come il rilevamento delle funzionalità e il design responsivo, anziché controllare il sistema operativo su cui viene eseguito il browser.
Se la tua estensione controlla già il sistema operativo, le API delle estensioni e l'agente utente restituiscono piattaforme diverse su Googlebook OS.
chrome.runtime.getPlatformInfo().osrestituisce'android'. Se la tua estensione condivide il codice con i browser mobile e presuppone che'android'indichi un telefono, gli utenti di Googlebook visualizzeranno la tua UI mobile su un laptop.navigator.userAgentcontieneCrOS. Per il layout generale della pagina, è consigliabile utilizzare un Chromebook. Tuttavia,navigator.userAgentData.platformrestituisce'Android'e se la tua estensione controlla lo user agent per mostrare i suggerimenti per le scorciatoie da tastiera di ChromeOS (come il tastoSearch) o per chiamare API solo di ChromeOS, questi controlli non funzioneranno su un Googlebook.
La tabella seguente confronta questi indicatori tra le piattaforme.
| Indicatore | Googlebook OS | Smartphone Android | Chromebook | Windows, macOS, Linux |
|---|---|---|---|---|
runtime.getPlatformInfo().os |
android |
android |
cros |
mac, win e linux |
navigator.userAgentData.platform |
Android |
Android |
Chrome OS |
Windows, macOS e Linux |
navigator.userAgentData.mobile |
false |
true |
false |
false |
Al contrario, navigator.userAgent restituisce una stringa user-agent ridotta identica sia su Googlebook OS sia su ChromeOS, perché entrambe le piattaforme segnalano il token della piattaforma X11; CrOS x86_64
14541.0.0 bloccato.
// 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
Come per tutto lo sviluppo web, il rilevamento della piattaforma può essere inaffidabile, quindi utilizzalo solo quando non puoi utilizzare il rilevamento delle funzionalità per testare direttamente ciò di cui hai bisogno. Se
devi distinguere Googlebook OS da uno smartphone Android e da
Chromebook, puoi farlo combinando
runtime.getPlatformInfo()
con il suggerimento mobile di 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
};
}
Sebbene questa particolare combinazione di confronti di stringhe punti in modo univoco ai dispositivi Googlebook OS al momento del lancio del prodotto, potrebbe non essere sempre così. Con l'aumentare del numero di dispositivi spediti nel tempo, in una moltitudine di fattori di forma, potrebbe arrivare un momento in cui alcuni dispositivi Googlebook OS non corrispondono a questo rilevamento.
Per rilevare Googlebooks dalle pagine web o sul server utilizzando i suggerimenti client, consulta Identificare Googlebooks.
Messaggistica nativa
La messaggistica nativa non è
ancora disponibile su Googlebook OS, ma ci stiamo lavorando. Prevedi che abbia
estensioni che comunicano con le app Android installate anziché con gli eseguibili
locali del desktop. Per il momento, le estensioni che dichiarano l'autorizzazione nativeMessaging
vengono comunque installate ed eseguite su Googlebook OS, ma i tentativi di connessione non vanno a buon fine. Assicurati che
l'estensione gestisca correttamente gli errori di connessione e che torni a un
flusso di lavoro basato sul web quando l'host nativo non è disponibile. Segui il problema
555299632 per ricevere aggiornamenti.
Scorciatoie da tastiera
Le scorciatoie commands seguono le stesse
regole di Chrome su Linux. Chrome legge la voce linux di suggested_key su
Googlebook OS, quindi le scorciatoie definite in chromeos non sono applicabili. Anche le combinazioni di tasti Search non funzionano, in quanto non è presente un tasto "Cerca" sui dispositivi con Googlebook OS.
SharedArrayBuffer
Su Windows, macOS, Linux e ChromeOS, le estensioni possono utilizzare SharedArrayBuffer
automaticamente in qualsiasi contesto. Su Googlebook OS, le estensioni devono attivare
esplicitamente l'isolamento
multiorigine in
manifest.json per utilizzare SharedArrayBuffer.
L'attivazione dell'isolamento multiorigine abilita SharedArrayBuffer nei documenti delle estensioni, come popup, pagine delle opzioni e documenti
offscreen. Tuttavia, non attiva
SharedArrayBuffer nei service worker delle estensioni, perché Chrome non supporta ancora
l'isolamento cross-origin per i service worker (problema
40150182). Se la logica in background si basa su
SharedArrayBuffer (ad esempio, per eseguire WebAssembly multithread), esegui il codice in
un documento offscreen anziché nel service worker.
API solo per ChromeOS
Le API contrassegnate come Solo ChromeOS nel riferimento API delle estensioni di Chrome (ad esempio documentScan, fileSystemProvider, vpnProvider e printing) non sono supportate su Googlebook OS, anche se navigator.userAgent include CrOS. Le estensioni che dichiarano queste autorizzazioni
vengono comunque installate ed eseguite, ma gli spazi dei nomi API sono undefined in fase di runtime. Verifica
che esista uno spazio dei nomi API prima di chiamarlo, anziché fare affidamento al rilevamento
dello user agent.
browser.system.storage
L'API browser.system.storage
non è supportata su Googlebook OS. Le estensioni che dichiarano l'autorizzazione
system.storage in manifest.json vengono comunque installate ed eseguite, ma lo
spazio dei nomi è undefined in fase di runtime. Controlla se l'API è definita prima di chiamare getInfo(), ejectDevice() o registrare i listener di archiviazione.