تعديل الإضافة لتتوافق مع نظام التشغيل Googlebook OS

‫Googlebook OS هو نظام تشغيل لأجهزة Googlebook، وهو يستند إلى حزمة تكنولوجيا Android ويتضمّن أساسيات الكمبيوتر المكتبي من ChromeOS. تتوافق Googlebooks مع منصة WebExtensions نفسها المتوفّرة على أنظمة التشغيل Windows وmacOS وChromeOS، ولكن هناك بعض الاختلافات في طريقة عملها على هذه الأنظمة.

  • من النادر الحاجة إلى رصد المنصة، ولكن قد تحدث أخطاء في عمليات التحقّق الحالية لأنّ واجهات برمجة التطبيقات للإضافات تُبلغ عن android بينما يُبلغ وكيل المستخدم عن ChromeOS.
  • ميزة المراسلة الأصلية غير متاحة بعد، ولكننا نعمل على توفيرها. من المتوقّع أن يتم توجيه الرسائل إلى تطبيق Android مثبَّت بدلاً من ملف تنفيذي على الكمبيوتر.
  • تستخدم اختصارات لوحة المفاتيح ربط مفاتيح Linux بدلاً من إدخالات chromeos.
  • تتطلّب SharedArrayBuffer تفعيل ميزة حظر الوصول من نطاقات أخرى، ويجب أن يتم تشغيلها في صفحة إضافة أو مستند خارج الشاشة بدلاً من مشغّل الخدمات.
  • لا تتوافق واجهات برمجة التطبيقات المخصّصة لنظام التشغيل ChromeOS مع نظام التشغيل Googlebook OS، على الرغم من أنّ وكيل المستخدم يعرض Chrome OS. ستظل الإضافات التي تحدّد هذه الأذونات قابلة للتثبيت، ولكن ستكون مساحات أسماء واجهة برمجة التطبيقات undefined في وقت التشغيل.
  • لا تتوافق browser.system.storage مع نظام التشغيل Googlebook، لذا تكون مساحة اسم واجهة برمجة التطبيقات undefined في وقت التشغيل.

رصد المنصات

لا تحتاج معظم الإضافات إلى رصد Googlebook OS. اتّبِع أفضل الممارسات المعتادة لتطوير الويب، مثل رصد الميزات والتصميم المتجاوب، بدلاً من التحقّق من نظام التشغيل الذي يعمل عليه المتصفّح.

إذا كانت الإضافة تتحقّق من نظام التشغيل، ستعرض واجهات برمجة التطبيقات الخاصة بالإضافات ووكيل المستخدم منصات مختلفة على نظام التشغيل 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 OS و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 من تلميحات User-Agent Client.

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 مع عملية الرصد هذه.

للكشف عن Googlebooks من صفحات الويب أو على الخادم باستخدام تلميحات العميل، يُرجى الاطّلاع على تحديد Googlebooks.

المراسلة الأصلية

لا تتوفّر ميزة المراسلة المدمجة بعد على نظام التشغيل Googlebook OS، ولكنّنا نعمل على توفيرها. ومن المتوقّع أن تتضمّن هذه الحزمة إضافات تتواصل مع تطبيقات Android المثبَّتة بدلاً من الملفات التنفيذية المحلية على الكمبيوتر. في الوقت الحالي، لا يزال بإمكان الإضافات التي تطلب الإذن nativeMessaging التثبيت والتشغيل على نظام التشغيل Googlebook OS، ولكن محاولات الاتصال لا تنجح. تأكَّد من أنّ الإضافة تتعامل مع حالات تعذُّر الاتصال بشكل سليم وتعود إلى سير عمل مستند إلى الويب عندما لا يكون المضيف الأصلي متاحًا. يمكنك متابعة المشكلة 555299632 لمعرفة آخر الأخبار.

اختصارات لوحة المفاتيح

تخضع اختصارات commands للقواعد نفسها التي يخضع لها Chrome على Linux. يقرأ Chrome إدخال linux الخاص بـ suggested_key على نظام التشغيل Googlebook، لذا لا تنطبق الاختصارات المحدّدة ضمن chromeos. لا تعمل أيضًا مجموعات المفاتيح التي تتضمّن المفتاح Search، لأنّه لا يتوفّر مفتاح "بحث" على أجهزة Googlebook OS.

SharedArrayBuffer

على أجهزة Windows وmacOS وLinux وChromeOS، يمكن للإضافات استخدام SharedArrayBuffer تلقائيًا في أي سياق. على نظام التشغيل Googlebook OS، يجب أن تفعّل الإضافات ميزة حظر الوصول من نطاقات أخرى بشكل صريح في manifest.json لاستخدام SharedArrayBuffer.

يؤدي تفعيل ميزة حظر الوصول من نطاقات أخرى إلى تفعيل SharedArrayBuffer في مستندات الإضافة، مثل النوافذ المنبثقة وصفحات الخيارات والمستندات غير المرئية. ومع ذلك، لا يفعّل SharedArrayBuffer في مشغّلات الخدمات الخاصة بالإضافات، لأنّ Chrome لا يتيح بعد عزل المصادر المتعددة لمشغّلات الخدمات (المشكلة 40150182). إذا كانت منطق الخلفية يعتمد على SharedArrayBuffer (على سبيل المثال، لتشغيل WebAssembly متعدد الخيوط)، شغِّل هذا الرمز في مستند خارج الشاشة بدلاً من عامل الخدمة.

واجهات برمجة التطبيقات المتاحة على ChromeOS فقط

إنّ واجهات برمجة التطبيقات التي تم وضع علامة ChromeOS فقط عليها في مرجع واجهات برمجة التطبيقات لإضافات Chrome (مثل documentScan وfileSystemProvider وvpnProvider وprinting) غير متوافقة مع نظام التشغيل Googlebook، حتى إذا كان navigator.userAgent يتضمّن CrOS. ستظل الإضافات التي تحدّد هذه الأذونات قابلة للتثبيت والتشغيل، ولكن ستكون مساحات أسماء واجهات برمجة التطبيقات undefined في وقت التشغيل. تحقَّق من توفّر مساحة اسم لواجهة برمجة التطبيقات قبل طلبها بدلاً من الاعتماد على رصد وكيل المستخدم.

browser.system.storage

لا تتوافق واجهة برمجة التطبيقات browser.system.storage مع نظام التشغيل Googlebook OS. تستمر الإضافات التي تحدّد إذن system.storage في manifest.json في التثبيت والتشغيل، ولكن يكون مساحة الاسم undefined في وقت التشغيل. تحقَّق مما إذا كانت واجهة برمجة التطبيقات معرَّفة قبل استدعاء getInfo() أو ejectDevice() أو تسجيل أدوات معالجة أحداث التخزين.