Googlebook OS는 Android 기술 스택을 기반으로 빌드되고 ChromeOS의 데스크톱 기반과 페어링되는 Googlebook 기기용 운영체제입니다. Googlebooks는 Windows, macOS, ChromeOS에 있는 것과 동일한 WebExtensions 플랫폼을 지원하지만 실행 방식에는 몇 가지 차이점이 있습니다.
- 플랫폼 감지는 거의 필요하지 않지만 확장 프로그램 API는
android를 보고 사용자 에이전트는 ChromeOS를 보고하므로 기존 검사가 잘못될 수 있습니다. - 네이티브 메시지는 아직 제공되지 않지만 개발 중입니다. 메시지가 데스크톱 실행 파일이 아닌 설치된 Android 앱으로 라우팅될 것으로 예상합니다.
- 단축키는
chromeos항목이 아닌 Linux 키 바인딩을 사용합니다. SharedArrayBuffer에는 교차 출처 격리를 선택해야 하며 서비스 워커가 아닌 확장 프로그램 페이지나 오프스크린 문서에서 실행해야 합니다.- 사용자 에이전트가
Chrome OS를 보고하더라도 ChromeOS 전용 API는 Googlebook OS에서 지원되지 않습니다. 이러한 권한을 선언하는 확장 프로그램은 여전히 설치되지만 API 네임스페이스는 런타임에undefined입니다. browser.system.storage은 Googlebook OS에서 지원되지 않으므로 런타임 시 API 네임스페이스는undefined입니다.
플랫폼 감지
대부분의 확장 프로그램은 Googlebook OS를 감지할 필요가 없습니다. 브라우저가 실행되는 운영체제를 확인하는 대신 기능 감지 및 반응형 디자인과 같은 표준 웹 개발 권장사항을 따르세요.
확장 프로그램이 이미 운영체제를 확인하는 경우 확장 프로그램 API와 사용자 에이전트는 Googlebook OS에서 다른 플랫폼을 반환합니다.
chrome.runtime.getPlatformInfo().os에서'android'가 반환됩니다. 확장 프로그램이 모바일 브라우저와 코드를 공유하고'android'가 휴대전화를 의미한다고 가정하면 Googlebook 사용자는 노트북에서 모바일 UI를 보게 됩니다.navigator.userAgent에CrOS이 포함됩니다. 일반적인 페이지 레이아웃의 경우 Chromebook을 일치시키는 것이 좋습니다. 하지만navigator.userAgentData.platform는'Android'를 반환하며, 확장 프로그램에서 사용자 에이전트를 확인하여 ChromeOS 단축키 힌트 (예:Search키)를 표시하거나 ChromeOS 전용 API를 호출하는 경우 Googlebook에서 이러한 확인이 잘못 실행됩니다.
다음 표에서는 플랫폼별로 이러한 신호를 비교합니다.
| 신호 | Googlebook OS | 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 |
반면 Googlebook OS와 ChromeOS 모두 고정된 X11; CrOS x86_64
14541.0.0 플랫폼 토큰을 보고하므로 navigator.userAgent는 두 플랫폼에서 동일한 축소된 사용자 에이전트 문자열을 반환합니다.
// 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
모든 웹 개발과 마찬가지로 플랫폼 감지는 신뢰할 수 없으므로 필요한 항목을 직접 테스트하기 위해 기능 감지를 사용할 수 없는 경우에만 사용하세요. Android 휴대전화와 Chromebook 모두에서 Googlebook OS를 구분해야 하는 경우 runtime.getPlatformInfo()를 User-Agent Client Hints의 mobile 힌트와 결합하면 됩니다.
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
};
}
이 특정 문자열 비교 조합은 제품 출시 시 Googlebook OS 기기를 고유하게 가리키지만 항상 그런 것은 아닙니다. 시간이 지남에 따라 다양한 폼 팩터의 기기가 더 많이 출시되면서 일부 Googlebook OS 기기가 감지에 일치하지 않는 시기가 올 수 있습니다.
클라이언트 힌트를 사용하여 웹페이지 또는 서버에서 Googlebook을 감지하려면 Googlebook 식별을 참고하세요.
네이티브 메시지
네이티브 메시지는 아직 Googlebook OS에서 사용할 수 없지만 개발 중입니다. 로컬 데스크톱 실행 파일이 아닌 설치된 Android 앱과 통신하는 확장 프로그램이 있을 것으로 예상됩니다. 현재 nativeMessaging 권한을 선언하는 확장 프로그램은 Googlebook OS에 설치되고 실행되지만 연결 시도가 실패합니다. 확장이 연결 실패를 적절하게 처리하고 네이티브 호스트를 사용할 수 없는 경우 웹 기반 워크플로로 대체되는지 확인하세요. 업데이트는 문제 555299632를 참고하세요.
단축키
commands 단축키는 Linux의 Chrome과 동일한 규칙을 따릅니다. Chrome은 Googlebook OS에서 suggested_key의 linux 항목을 읽으므로 chromeos 아래에 정의된 단축키는 적용되지 않습니다. Googlebook OS 기기에는 '검색' 키가 없으므로 Search 키 조합도 작동하지 않습니다.
SharedArrayBuffer
Windows, macOS, Linux, ChromeOS에서 확장 프로그램은 모든 컨텍스트에서 SharedArrayBuffer를 자동으로 사용할 수 있습니다. Googlebook OS에서 확장 프로그램은 SharedArrayBuffer를 사용하려면 manifest.json에서 명시적으로 교차 출처 분리를 선택해야 합니다.
교차 출처 격리를 선택하면 팝업, 옵션 페이지, 오프스크린 문서와 같은 확장 프로그램 문서에서 SharedArrayBuffer를 사용할 수 있습니다. 하지만 Chrome에서는 아직 서비스 워커의 교차 출처 격리를 지원하지 않으므로 (문제 40150182) 확장 프로그램 서비스 워커에서 SharedArrayBuffer를 사용 설정하지는 않습니다. 백그라운드 로직이 SharedArrayBuffer에 의존하는 경우 (예: 스레드 WebAssembly 실행) 서비스 워커 대신 오프스크린 문서에서 해당 코드를 실행하세요.
ChromeOS 전용 API
Chrome 확장 프로그램 API 참조에서 ChromeOS 전용으로 표시된 API (예: documentScan, fileSystemProvider, vpnProvider, printing)는 navigator.userAgent에 CrOS이 포함되어 있더라도 Googlebook OS에서 지원되지 않습니다. 이러한 권한을 선언하는 확장 프로그램은 여전히 설치되고 실행되지만 런타임 시 API 네임스페이스는 undefined입니다. 사용자 에이전트 감지에 의존하기보다는 호출하기 전에 API 네임스페이스가 있는지 확인하세요.
browser.system.storage
browser.system.storage API는 Googlebook OS에서 지원되지 않습니다. manifest.json에서 system.storage 권한을 선언하는 확장 프로그램은 여전히 설치되고 실행되지만 런타임 시 네임스페이스는 undefined입니다. getInfo() 또는 ejectDevice()를 호출하거나 스토리지 리스너를 등록하기 전에 API가 정의되어 있는지 확인합니다.