Googlebook OS adalah sistem operasi untuk perangkat Googlebook, yang dibangun di atas technology stack Android dan dipasangkan dengan fondasi desktop dari ChromeOS. Googlebook mendukung platform WebExtensions yang sama dengan yang ada di Windows, macOS, dan ChromeOS, tetapi ada beberapa perbedaan dalam cara menjalankannya di sana.
- Deteksi platform jarang diperlukan, tetapi pemeriksaan yang ada dapat
gagal karena API ekstensi melaporkan
android, sedangkan agen pengguna melaporkan ChromeOS. - Pesan native belum tersedia, tetapi sedang dikerjakan. Harapkan pesan dirutekan ke aplikasi Android yang terinstal, bukan dapat dieksekusi desktop.
- Pintasan keyboard menggunakan pengikatan tombol Linux, bukan entri
chromeos. SharedArrayBuffermengharuskan Anda ikut serta dalam isolasi lintas asal, dan harus berjalan di halaman ekstensi atau dokumen offscreen, bukan service worker.- API khusus ChromeOS tidak didukung di Googlebook OS,
meskipun agen pengguna melaporkan
Chrome OS. Ekstensi yang mendeklarasikan izin ini tetap diinstal, tetapi namespace API adalahundefinedsaat runtime. browser.system.storagetidak didukung di Googlebook OS, sehingga namespace API adalahundefinedsaat runtime.
Deteksi platform
Sebagian besar ekstensi tidak perlu mendeteksi Googlebook OS. Ikuti praktik terbaik pengembangan web standar, seperti deteksi fitur dan desain responsif, daripada memeriksa sistem operasi yang digunakan browser.
Jika ekstensi Anda sudah memeriksa sistem operasi, API ekstensi dan agen pengguna akan menampilkan platform yang berbeda di Googlebook OS.
chrome.runtime.getPlatformInfo().osakan menampilkan'android'. Jika ekstensi Anda berbagi kode dengan browser seluler dan mengasumsikan'android'berarti ponsel, pengguna Googlebook akan mendapatkan UI seluler Anda di laptop.navigator.userAgentberisiCrOS. Untuk tata letak halaman umum, pencocokan Chromebook berfungsi dengan baik. Namun,navigator.userAgentData.platformmenampilkan'Android', dan jika ekstensi Anda memeriksa agen pengguna untuk menampilkan petunjuk pintasan keyboard ChromeOS (seperti tombolSearch) atau untuk memanggil API khusus ChromeOS, pemeriksaan tersebut akan salah di Googlebook.
Tabel berikut membandingkan sinyal ini di seluruh platform.
| Sinyal | Googlebook OS | Ponsel 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 |
Sebaliknya, navigator.userAgent menampilkan string agen pengguna yang dikurangi yang identik di Googlebook OS dan ChromeOS, karena kedua platform melaporkan token platform X11; CrOS x86_64
14541.0.0 yang dibekukan.
// 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
Seperti halnya semua pengembangan web, deteksi platform bisa tidak dapat diandalkan, jadi gunakan hanya jika Anda tidak dapat menggunakan deteksi fitur untuk menguji secara langsung apa yang Anda butuhkan. Jika Anda perlu membedakan Googlebook OS dari ponsel Android dan Chromebook, hal ini dapat dilakukan dengan menggabungkan
runtime.getPlatformInfo()
dengan petunjuk mobile dari Petunjuk Klien 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
};
}
Meskipun kombinasi perbandingan string ini secara unik mengarah ke perangkat Googlebook OS pada saat peluncuran produk, hal itu mungkin tidak selalu terjadi. Seiring waktu, saat lebih banyak perangkat mulai dikirimkan dalam berbagai faktor bentuk, mungkin akan tiba saatnya beberapa perangkat Googlebook OS tidak cocok dengan deteksi tersebut.
Untuk mendeteksi Googlebook dari halaman web atau di server menggunakan petunjuk klien, lihat Mengidentifikasi Googlebook.
Pesan native
Pesan native belum tersedia di Googlebook OS, tetapi sedang diupayakan. Harapkan ekstensi ini berkomunikasi dengan aplikasi Android yang diinstal, bukan file yang dapat dieksekusi desktop lokal. Untuk saat ini, ekstensi yang mendeklarasikan izin nativeMessaging
tetap diinstal dan berjalan di Googlebook OS, tetapi upaya koneksi gagal. Pastikan ekstensi Anda menangani kegagalan koneksi dengan baik dan kembali ke alur kerja berbasis web saat host native tidak tersedia. Ikuti masalah
555299632 untuk mendapatkan info terbaru.
Pintasan keyboard
Pintasan commands mengikuti aturan yang sama dengan Chrome di Linux. Chrome membaca entri linux dari suggested_key di
Googlebook OS, sehingga pintasan yang ditentukan di bagian chromeos tidak berlaku. Kombinasi tombol Search juga tidak berfungsi karena tidak ada tombol "Penelusuran" di perangkat Googlebook OS.
SharedArrayBuffer
Di Windows, macOS, Linux, dan ChromeOS, ekstensi dapat menggunakan SharedArrayBuffer
secara otomatis dalam konteks apa pun. Di Googlebook OS, ekstensi harus secara eksplisit memilih untuk menggunakan isolasi lintas asal di manifest.json untuk menggunakan SharedArrayBuffer.
Memilih untuk menggunakan isolasi lintas asal akan mengaktifkan SharedArrayBuffer di dokumen ekstensi seperti pop-up, halaman opsi, dan dokumen di luar layar. Namun, fitur ini tidak mengaktifkan
SharedArrayBuffer di pekerja layanan ekstensi, karena Chrome belum
mendukung isolasi lintas origin untuk pekerja layanan (masalah
40150182). Jika logika latar belakang Anda bergantung pada
SharedArrayBuffer (misalnya, untuk menjalankan WebAssembly ber-thread), jalankan kode tersebut di
dokumen di balik layar, bukan di service worker Anda.
API khusus ChromeOS
API yang ditandai Khusus ChromeOS dalam referensi API Ekstensi Chrome (seperti documentScan, fileSystemProvider, vpnProvider, dan printing) tidak didukung di Googlebook OS, meskipun navigator.userAgent mencakup CrOS. Ekstensi yang mendeklarasikan izin ini
tetap diinstal dan berjalan, tetapi namespace API adalah undefined saat runtime. Periksa apakah namespace API ada sebelum memanggilnya, bukan mengandalkan deteksi agen pengguna.
browser.system.storage
API browser.system.storage
tidak didukung di Googlebook OS. Ekstensi yang mendeklarasikan izin
system.storage di manifest.json masih diinstal dan dijalankan, tetapi namespace-nya
adalah undefined saat runtime. Periksa apakah API ditentukan sebelum
memanggil getInfo(), ejectDevice(), atau mendaftarkan pemroses penyimpanan.