O Googlebook OS é um sistema operacional para dispositivos Googlebook, criado com base na pilha de tecnologia Android e combinado com os fundamentos de computador do ChromeOS. O Google Livros é compatível com a mesma plataforma WebExtensions que existe no Windows, macOS e ChromeOS, mas há algumas diferenças na forma como eles são executados nesses sistemas.
- A detecção de plataforma raramente é necessária, mas as verificações atuais podem
ser acionadas incorretamente porque as APIs de extensão informam
android, enquanto o user agent informa ChromeOS. - A mensagens nativas ainda não está disponível, mas estamos trabalhando nisso. Ele vai encaminhar mensagens para um app Android instalado em vez de um executável de computador.
- Os atalhos do teclado usam vinculações de teclas do Linux em vez de entradas
chromeos. - O
SharedArrayBufferexige a ativação do isolamento entre origens e precisa ser executado em uma página de extensão ou um documento fora da tela, em vez de um service worker. - As APIs exclusivas do ChromeOS não são compatíveis com o Googlebook OS, mesmo que o user agent informe
Chrome OS. As extensões que declaram essas permissões ainda são instaladas, mas os namespaces da API sãoundefinedno tempo de execução. browser.system.storagenão é compatível com o Googlebook OS. Portanto, o namespace da API éundefinedno tempo de execução.
Detecção de plataforma
A maioria das extensões não precisa detectar o Googlebook OS. Siga as práticas recomendadas padrão de desenvolvimento da Web, como detecção de recursos e design responsivo, em vez de verificar em qual sistema operacional o navegador está sendo executado.
Se a extensão já verificar o sistema operacional, as APIs de extensão e o user agent retornarem plataformas diferentes no Googlebook OS.
chrome.runtime.getPlatformInfo().osretorna'android'. Se a extensão compartilhar código com navegadores para dispositivos móveis e presumir que'android'significa um smartphone, os usuários do Google Livros vão receber a interface para dispositivos móveis em um laptop.navigator.userAgentcontémCrOS. Para layout de página geral, um Chromebook é uma boa opção. No entanto,navigator.userAgentData.platformretorna'Android', e se a extensão verificar o user agent para mostrar dicas de atalho do teclado do ChromeOS (como a teclaSearch) ou para chamar APIs somente do ChromeOS, essas verificações vão falhar em um Googlebook.
A tabela a seguir compara esses indicadores em diferentes plataformas.
| Indicador | Googlebook OS | Smartphone Android | 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 |
Por outro lado, navigator.userAgent retorna uma string de user agent reduzida idêntica no Googlebook OS e no ChromeOS, porque ambas as plataformas informam o token de plataforma X11; CrOS x86_64
14541.0.0 congelado.
// 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
Como em todo desenvolvimento da Web, a detecção de plataforma pode não ser confiável. Portanto, use-a apenas quando não for possível usar a detecção de recursos para testar diretamente o que você precisa. Se você precisar distinguir o Googlebook OS de um smartphone Android e de um Chromebook, combine runtime.getPlatformInfo() com a dica mobile de Dicas de cliente do User-Agent.
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
};
}
Embora essa combinação específica de comparações de strings aponte exclusivamente para dispositivos Googlebook OS no momento do lançamento do produto, isso nem sempre será o caso. À medida que mais dispositivos forem enviados ao longo do tempo, em uma infinidade de formatos, pode chegar um momento em que alguns dispositivos Googlebook OS não correspondam a essa detecção.
Para detectar o Google Livros em páginas da Web ou no servidor usando dicas de cliente, consulte Identificar o Google Livros.
Mensagens nativas
As mensagens nativas ainda não estão disponíveis no Googlebook OS, mas estamos trabalhando nisso. As extensões se comunicam com apps Android instalados, e não com executáveis locais de computador. Por enquanto, as extensões que declaram a permissão nativeMessaging
ainda são instaladas e executadas no Googlebook OS, mas as tentativas de conexão falham. Verifique se
a extensão processa falhas de conexão de maneira adequada e volta a um
fluxo de trabalho baseado na Web quando o host nativo não está disponível. Siga o problema
555299632 para receber atualizações.
Atalhos do teclado
Os atalhos do commands seguem as mesmas
regras do Chrome no Linux. O Chrome lê a entrada linux de suggested_key no
Googlebook OS. Portanto, os atalhos definidos em chromeos não se aplicam. As combinações de teclas Search também não funcionam, já que não há uma tecla "Pesquisar" nos dispositivos Googlebook OS.
SharedArrayBuffer
No Windows, macOS, Linux e ChromeOS, as extensões podem usar SharedArrayBuffer
automaticamente em qualquer contexto. No Googlebook OS, as extensões precisam ativar explicitamente o isolamento de origem cruzada em manifest.json para usar SharedArrayBuffer.
Ao ativar o isolamento entre origens, o SharedArrayBuffer é ativado em documentos de extensão, como pop-ups, páginas de opções e documentos
em segundo plano. No entanto, ela não ativa o
SharedArrayBuffer em service workers de extensão, porque o Chrome ainda não
oferece suporte ao isolamento entre origens para service workers (problema
40150182). Se a lógica em segundo plano depender de
SharedArrayBuffer (por exemplo, para executar WebAssembly com linhas de execução), execute esse código em
um documento fora da tela em vez do service worker.
APIs somente do ChromeOS
As APIs marcadas como Somente ChromeOS na referência da API Chrome
Extensions (como documentScan, fileSystemProvider,
vpnProvider e printing) não são compatíveis com o Googlebook OS, mesmo que
navigator.userAgent inclua CrOS. As extensões que declaram essas permissões
ainda são instaladas e executadas, mas os namespaces da API são undefined durante a execução. Verifique se um namespace de API existe antes de chamá-lo, em vez de depender da detecção do user agent.
browser.system.storage
A API browser.system.storage
não é compatível com o Googlebook OS. As extensões que declaram a permissão
system.storage em manifest.json ainda são instaladas e executadas, mas o
namespace é undefined no tempo de execução. Verifique se a API está definida antes de
chamar getInfo(), ejectDevice() ou registrar listeners de armazenamento.