سیستمعامل Googlebook سیستمعاملی برای دستگاههای Googlebook است که براساس پشته فناوری Android ساخته شده است و با پایههای رایانه از ChromeOS جفت شده است. Googlebooks از همان پلاتفرم «افزونههای وب» که در Windows، macOS، و ChromeOS وجود دارد پشتیبانی میکند، اما در نحوه اجرای آنها در این پلاتفرمها تفاوتهایی وجود دارد.
- تشخیص پلاتفرم بهندرت لازم است، اما بررسیهای موجود ممکن است
اشتباه عمل کنند زیرا میاناهای برنامهسازی کاربردی افزونه
androidرا گزارش میکنند درحالیکه عامل کاربر ChromeOS را گزارش میکند. - پیامرسانی بومی هنوز دردسترس نیست، اما درحال کار روی آن هستیم. انتظار داشته باشید که پیامها را به برنامه Android نصبشده هدایت کند نه به فایل اجرایی رایانه.
- میانبرهای صفحهکلید از پیوند کلیدهای Linux بهجای
chromeosورودیها استفاده میکنند. SharedArrayBufferبرای فعال شدن در جداسازی بینمبدائی لازم است و باید در صفحه افزونه یا سند خارج از صفحه اجرا شود نه در عامل خدماتی.- میاناهای برنامهسازی کاربردی فقط ChromeOS در Googlebook OS پشتیبانی نمیشود،
حتی اگر عامل کاربر
Chrome OSرا گزارش کند. افزونههایی که این اجازهها را اعلام میکنند همچنان نصب میشوند، اما فضاهای نام API در زمان اجراundefinedهستند. browser.system.storageدر سیستمعامل Googlebook پشتیبانی نمیشود، بنابراین فضای نام API در زمان اجراundefinedاست.
تشخیص پلاتفرم
اکثر افزونهها نیازی به تشخیص سیستمعامل Googlebook ندارند. بهجای اینکه بررسی کنید مرورگر روی کدام سیستمعامل اجرا میشود، از روالهای مطلوب استاندارد توسعه وب، مثل تشخیص ویژگی و طراحی واکنشگرا، پیروی کنید.
اگر افزونه شما ازقبل سیستمعامل را بررسی میکند، APIهای افزونه و عامل کاربر پلاتفرمهای مختلفی را در سیستمعامل Googlebook برمیگردانند.
-
chrome.runtime.getPlatformInfo().os'android'را برمیگرداند. اگر افزونه شما کد را با مرورگرهای تلفن همراه همرسانی میکند و فرض میکند'android'به معنی تلفن است، کاربران Googlebook رابط کاربری تلفن همراه شما را در رایانه کیفی دریافت خواهند کرد. -
navigator.userAgentحاویCrOSاست. برای چیدمان کلی صفحه، تطبیق با Chromebook خوب کار میکند. بااینحال،navigator.userAgentData.platformبرمیگرداند'Android'، و اگر افزونه شما عامل کاربر را بررسی میکند تا راهنماییهای میانبر صفحهکلید ChromeOS (مثل کلیدSearch) را نشان دهد یا «میاناهای برنامهسازی کاربردی» فقط 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 یک رشته عامل کاربر کاهشیافته یکسان در هر دو سیستمعامل Googlebook و ChromeOS برمیگرداند، زیرا هر دو پلاتفرم نشان پلاتفرم 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 را از تلفن Android و
Chromebook متمایز کنید، میتوانید با ترکیب کردن
runtime.getPlatformInfo()
با اشاره 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 اشاره میکند، اما ممکن است همیشه اینگونه نباشد. با گذشت زمان و ارسال دستگاههای بیشتر، در شکلهای مختلف ممکن است زمانی فرا برسد که برخیاز دستگاههای Googlebook OS با آن تشخیص مطابقت نداشته باشند.
برای شناسایی Googlebook از صفحههای وب یا در سرور بااستفاده از نشانهای کارخواه، به شناسایی Googlebook مراجعه کنید.
پیامرسانی بومی
پیامرسانی بومی هنوز در سیستمعامل Googlebook دردسترس نیست، اما درحال کار روی آن هستیم. انتظار میرود که این برنامه افزونههایی داشته باشد که با برنامههای Android نصبشده ارتباط برقرار میکنند، نه با فایلهای اجرایی محلی در رایانه. درحالحاضر، افزونههایی که اجازه nativeMessaging را اعلام میکنند
همچنان در سیستمعامل Googlebook نصب و اجرا میشوند، اما تلاش برای اتصال ناموفق است. مطمئن شوید افزونه شما درصورت قطع اتصال بهخوبی عمل میکند و وقتی میزبان بومی دردسترس نیست، به گردش کار مبتنی بر وب برمیگردد. برای دریافت بهروزرسانیها، مسئله
۵۵۵۲۹۹۶۳۲ را دنبال کنید.
میانبرهای صفحهکلید
میانبرهای commands از همان قوانین Chrome در Linux پیروی میکنند. Chrome ورودی linux از suggested_key را در
Googlebook OS میخواند، بنابراین میانبرهای تعریفشده در chromeos اعمال نمیشوند. ترکیبهای Search کلید نیز کار نمیکند، زیرا در دستگاههای Googlebook OS کلید «جستجو» وجود ندارد.
SharedArrayBuffer
در Windows، macOS، Linux، و ChromeOS، افزونهها میتوانند بهطور خودکار در هر زمینهای از SharedArrayBuffer
استفاده کنند. در سیستمعامل Googlebook، افزونهها باید بهطور صریح در جداسازی بینمبدائی در manifest.json فعال شوند تا بتوانند از SharedArrayBuffer استفاده کنند.
فعال کردن جداسازی بینمبدائی SharedArrayBuffer را در اسناد افزونه
مثل بالاپرها، صفحههای گزینهها، و اسناد
خارج از صفحه فعال میکند. بااینحال، SharedArrayBuffer را در عاملان خدماتی افزونه فعال نمیکند، زیرا Chrome هنوز از جداسازی بین مبدأها برای عاملان خدماتی پشتیبانی نمیکند (مشکل
۴۰۱۵۰۱۸۲). اگر منطق پسزمینهتان به
SharedArrayBuffer (برای مثال، برای اجرای WebAssembly چندرشتهای) متکی است، آن کد را بهجای کارگزار سرویس در
سند خارج از صفحه اجرا کنید.
میاناهای برنامهسازی کاربردی فقط ChromeOS
میاناهای برنامهسازی کاربردی که در مرجع «میاناهای برنامهسازی کاربردی افزونههای Chrome» با فقط ChromeOS علامتگذاری شدهاند (مثل documentScan، fileSystemProvider،
vpnProvider، و printing) در سیستمعامل Googlebook پشتیبانی نمیشوند، حتی اگر navigator.userAgent شامل CrOS باشد. افزونههایی که این اجازهها را اعلام میکنند
همچنان نصب و اجرا میشوند، اما نامهای فضای API در زمان اجرا undefined هستند. بهجای تکیه بر شناسایی عامل کاربر، بررسی کنید که فضای نام API قبلاز فراخوانی آن وجود داشته باشد.
browser.system.storage
میانای برنامهسازی کاربردی browser.system.storage
در سیستمعامل Googlebook پشتیبانی نمیشود. افزونههایی که اجازه
system.storage را در manifest.json تعریف میکنند همچنان نصب و اجرا میشوند، اما
فضای نام در زمان اجرا undefined است. بررسی کنید که آیا میانای برنامهسازی کاربردی قبلاز
فراخوانی getInfo()، ejectDevice()، یا ثبت شنوندگان فضای ذخیرهسازی تعریف شده است یا نه.