تطبیق دادن افزونه برای سیستم‌عامل Googlebook

سیستم‌عامل 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()، یا ثبت شنوندگان فضای ذخیره‌سازی تعریف شده است یا نه.