Googlebook OS คือระบบปฏิบัติการสำหรับอุปกรณ์ Googlebook ซึ่งสร้างขึ้นบน Technology Stack ของ Android และจับคู่กับพื้นฐานของเดสก์ท็อปจาก ChromeOS Googlebooks รองรับแพลตฟอร์ม WebExtensions เดียวกันกับที่มีใน Windows, macOS และ ChromeOS แต่มีข้อแตกต่างบางอย่างเกี่ยวกับวิธีที่ส่วนขยายทำงานในแพลตฟอร์มเหล่านั้น
- การตรวจหาแพลตฟอร์มไม่ค่อยจำเป็น แต่การตรวจสอบที่มีอยู่อาจ
ทำงานผิดพลาดเนื่องจาก API ของส่วนขยายรายงาน
androidขณะที่ User Agent รายงาน ChromeOS - การรับส่งข้อความดั้งเดิมยังไม่พร้อมใช้งาน แต่เรากำลัง ดำเนินการอยู่ คาดว่าระบบจะกำหนดเส้นทางข้อความไปยังแอป Android ที่ติดตั้งไว้แทนที่จะเป็นไฟล์ที่เรียกใช้งานได้บนเดสก์ท็อป
- แป้นพิมพ์ลัดใช้การเชื่อมโยงคีย์ของ Linux แทนรายการ
chromeos SharedArrayBufferต้องเลือกใช้การแยกแบบข้ามต้นทาง และต้องทํางานในหน้าส่วนขยายหรือเอกสารนอกหน้าจอ แทนที่จะเป็น Service Worker- API สำหรับ ChromeOS เท่านั้นไม่รองรับใน Googlebook OS
แม้ว่า User Agent จะรายงาน
Chrome OSก็ตาม ส่วนขยายที่ประกาศสิทธิ์เหล่านี้จะยังคงติดตั้งได้ แต่เนมสเปซของ API จะเป็นundefinedใน รันไทม์ browser.system.storageไม่รองรับใน Googlebook OS ดังนั้นเนมสเปซของ API จึงเป็นundefinedในขณะรันไทม์
การตรวจหาแพลตฟอร์ม
ส่วนขยายส่วนใหญ่ไม่จำเป็นต้องตรวจหา Googlebook OS ทำตามแนวทางปฏิบัติแนะนำในการพัฒนาเว็บมาตรฐาน เช่น การตรวจหาฟีเจอร์และการออกแบบที่ปรับเปลี่ยนตามบริบท แทนที่จะตรวจสอบว่าเบราว์เซอร์ทำงานบนระบบปฏิบัติการใด
หากส่วนขยายตรวจสอบระบบปฏิบัติการอยู่แล้ว API ของส่วนขยายและ User Agent จะแสดงแพลตฟอร์มที่แตกต่างกันในระบบปฏิบัติการ Googlebook
chrome.runtime.getPlatformInfo().osคืนค่า'android'หากส่วนขยายแชร์โค้ดกับเบราว์เซอร์บนอุปกรณ์เคลื่อนที่และถือว่า'android'หมายถึงโทรศัพท์ ผู้ใช้ Googlebook จะเห็น UI สำหรับอุปกรณ์เคลื่อนที่บนแล็ปท็อปnavigator.userAgentมีCrOSสำหรับการจัดวางหน้าเว็บทั่วไป การใช้ Chromebook จะได้ผลดี อย่างไรก็ตามnavigator.userAgentData.platformจะส่งคืน'Android'และหากส่วนขยายตรวจสอบ User Agent เพื่อแสดงคำแนะนำแป้นพิมพ์ลัดของ ChromeOS (เช่น แป้นSearch) หรือเพื่อเรียกใช้ API ของ ChromeOS เท่านั้น การตรวจสอบเหล่านั้นจะทำงานผิดพลาดใน 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 |
ในทางตรงกันข้าม navigator.userAgent จะแสดงสตริง User-Agent ที่ลดขนาดแล้วที่เหมือนกันทั้งในระบบปฏิบัติการ Googlebook OS
และ ChromeOS เนื่องจากทั้ง 2 แพลตฟอร์มรายงานโทเค็นแพลตฟอร์ม 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
การตรวจหาแพลตฟอร์มอาจไม่น่าเชื่อถือเช่นเดียวกับการพัฒนาเว็บทั้งหมด ดังนั้นให้ใช้
เฉพาะในกรณีที่คุณไม่สามารถใช้การตรวจหาฟีเจอร์เพื่อทดสอบสิ่งที่ต้องการได้โดยตรง หากจำเป็นต้องแยกความแตกต่างระหว่าง Googlebook OS กับทั้งโทรศัพท์ Android และ Chromebook คุณสามารถทำได้โดยการรวม
runtime.getPlatformInfo()
เข้ากับคำใบ้ mobile จากคำแนะนำสำหรับไคลเอ็นต์ 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
};
}
แม้ว่าการเปรียบเทียบสตริงแบบเฉพาะเจาะจงนี้จะชี้ไปยังอุปกรณ์ Googlebook OS อย่างชัดเจนในขณะที่เปิดตัวผลิตภัณฑ์ แต่ก็อาจไม่เป็นเช่นนั้นเสมอไป เมื่อเวลาผ่านไปและมีการจัดส่งอุปกรณ์มากขึ้นในรูปแบบต่างๆ อาจมีบางครั้งที่อุปกรณ์ Googlebook OS บางเครื่องไม่ตรงกับการตรวจหาดังกล่าว
หากต้องการตรวจหา Googlebook จากหน้าเว็บหรือในเซิร์ฟเวอร์โดยใช้คำแนะนำไคลเอ็นต์ โปรดดูหัวข้อระบุ Googlebook
การรับส่งข้อความในเครื่อง
การรับส่งข้อความดั้งเดิมยังไม่พร้อมใช้งานในระบบปฏิบัติการ Googlebook OS แต่เรากำลังดำเนินการอยู่ คาดว่าจะมีส่วนขยายที่สื่อสารกับแอป Android ที่ติดตั้งไว้แทนที่จะเป็นไฟล์ปฏิบัติการในเดสก์ท็อปในเครื่อง
ในตอนนี้ ส่วนขยายที่ประกาศสิทธิ์ nativeMessaging ยังคงติดตั้งและทำงานใน Googlebook OS ได้ แต่การพยายามเชื่อมต่อจะล้มเหลว ตรวจสอบว่าส่วนขยายของคุณจัดการข้อผิดพลาดในการเชื่อมต่อได้อย่างราบรื่นและกลับไปใช้เวิร์กโฟลว์บนเว็บเมื่อโฮสต์เนทีฟไม่พร้อมใช้งาน โปรดติดตามข้อมูลอัปเดตเกี่ยวกับปัญหา
555299632
แป้นพิมพ์ลัด
แป้นพิมพ์ลัด commands จะใช้กฎเดียวกันกับ Chrome ใน Linux Chrome จะอ่านรายการ linux ของ suggested_key ใน
Googlebook OS ดังนั้นแป้นพิมพ์ลัดที่กำหนดไว้ใน chromeos จะไม่มีผล Search ก็ใช้ไม่ได้เช่นกัน เนื่องจากไม่มีปุ่ม "ค้นหา" ในอุปกรณ์ Googlebook OS
SharedArrayBuffer
ใน Windows, macOS, Linux และ ChromeOS ส่วนขยายจะใช้ SharedArrayBuffer
ได้โดยอัตโนมัติในทุกบริบท ใน Googlebook OS ส่วนขยายต้องเลือกใช้การแยกแบบข้ามต้นทางอย่างชัดเจนในmanifest.json เพื่อใช้ SharedArrayBuffer
การเลือกใช้การแยกแบบข้ามต้นทางจะเปิดใช้ SharedArrayBuffer ในเอกสารส่วนขยาย
เช่น ป๊อปอัป หน้าตัวเลือก และเอกสารนอกหน้าจอ อย่างไรก็ตาม ฟีเจอร์นี้ไม่ได้เปิดใช้
SharedArrayBuffer ใน Service Worker ของส่วนขยาย เนื่องจาก Chrome ยังไม่รองรับ
การแยกต้นทางข้ามสำหรับ Service Worker (ปัญหา
40150182) หากตรรกะเบื้องหลังของคุณอาศัย
SharedArrayBuffer (เช่น เพื่อเรียกใช้ WebAssembly แบบหลายเธรด) ให้เรียกใช้โค้ดนั้นใน
เอกสารนอกหน้าจอแทนที่จะใช้ Service Worker
API สำหรับ ChromeOS เท่านั้น
API ที่ทำเครื่องหมายว่าChromeOS เท่านั้นในเอกสารอ้างอิง Chrome
Extensions API (เช่น documentScan, fileSystemProvider,
vpnProvider และ printing) จะไม่รองรับใน Googlebook OS แม้ว่า
navigator.userAgent จะมี CrOS ก็ตาม ส่วนขยายที่ประกาศสิทธิ์เหล่านี้
จะยังคงติดตั้งและทำงานได้ แต่เนมสเปซของ API จะundefinedในรันไทม์ ตรวจสอบว่ามีเนมสเปซ API อยู่ก่อนที่จะเรียกใช้แทนที่จะอาศัยการตรวจหา User-Agent
browser.system.storage
browser.system.storage
API ไม่รองรับใน Googlebook OS ส่วนขยายที่ประกาศสิทธิ์
system.storageใน manifest.json จะยังคงติดตั้งและทำงานได้ แต่เนมสเปซ
จะเป็น undefined ในขณะรันไทม์ ตรวจสอบว่าได้กำหนด API ก่อน
เรียกใช้ getInfo(), ejectDevice() หรือลงทะเบียน Listener ของพื้นที่เก็บข้อมูล