Googlebook OS-এর জন্য আপনার এক্সটেনশন অ্যাডাপ্ট করা

Googlebook OS হল Googlebook ডিভাইসের জন্য একটি অপারেটিং সিস্টেম, যা Android টেকনোলজি স্ট্যাকের উপর ভিত্তি করে তৈরি করা হয়েছে এবং ChromeOS থেকে ডেস্কটপ ফাউন্ডেশনের সাথে পেয়ার করা হয়েছে। Googlebooks-এ Windows, macOS ও ChromeOS-এ থাকা একই WebExtensions প্ল্যাটফর্ম কাজ করে, তবে সেগুলি কীভাবে চলে তার মধ্যে কিছু পার্থক্য আছে।

  • প্ল্যাটফর্ম শনাক্তকরণ খুব কমই প্রয়োজন হয়, তবে এক্সটেনশন API android রিপোর্ট করার সময় ব্যবহারকারীর এজেন্ট ChromeOS রিপোর্ট করার কারণে আগে থেকে থাকা চেক ভুল হতে পারে।
  • নেটিভ মেসেজিং এখনও উপলভ্য নেই, তবে এটি নিয়ে কাজ চলছে। এটি ইনস্টল করা Android অ্যাপে মেসেজ রাউট করবে বলে আশা করা যায়, তবে ডেস্কটপ এক্সিকিউটেবল নয়।
  • কীবোর্ড শর্টকাট chromeos এন্ট্রির পরিবর্তে Linux কী বাইন্ডিং ব্যবহার করে।
  • SharedArrayBuffer-এর জন্য ক্রস-অরিজিন আইসোলেশন বেছে নিতে হবে এবং এটি অবশ্যই এক্সটেনশন পৃষ্ঠা বা অফস্ক্রিন ডকুমেন্টে রান করতে হবে, সার্ভিস ওয়ার্কারে নয়।
  • শুধুমাত্র ChromeOS-এ কাজ করে এমন API Googlebook OS-এ কাজ করে না, এমনকি ব্যবহারকারীর এজেন্ট Chrome OS রিপোর্ট করলেও। যেসব এক্সটেনশন এইসব অনুমতি ঘোষণা করে সেগুলি এখনও ইনস্টল করা যায়, কিন্তু API নেমস্পেস রানটাইমে undefined থাকে।
  • browser.system.storage Googlebook OS-এ কাজ করে না, তাই রানটাইমে API নেমস্পেস হল undefined।

প্ল্যাটফর্ম শনাক্তকরণ

বেশিরভাগ এক্সটেনশনের Googlebook OS শনাক্ত করার প্রয়োজন হয় না। ব্রাউজার কোন অপারেটিং সিস্টেমে চলছে তা চেক করার পরিবর্তে, ফিচার শনাক্তকরণ ও রেসপন্সিভ ডিজাইনের মতো ওয়েব ডেভেলপমেন্টের পেশাদার পদ্ধতি অনুসরণ করুন।

আপনার এক্সটেনশন যদি আগেই অপারেটিং সিস্টেম, এক্সটেনশন API চেক করে থাকে এবং Googlebook OS-এ ব্যবহারকারীর এজেন্ট আলাদা আলাদা প্ল্যাটফর্ম রিটার্ন করে।

  • chrome.runtime.getPlatformInfo().os 'android' ফেরত দেয়। আপনার এক্সটেনশন মোবাইল ব্রাউজারের সাথে কোড শেয়ার করলে এবং 'android' মানে ফোন ধরে নিলে, Googlebook ব্যবহারকারীরা ল্যাপটপে আপনার মোবাইল UI দেখতে পাবেন।
  • navigator.userAgent-এ CrOS আছে। সাধারণ পৃষ্ঠা লেআউটের জন্য, একটি Chromebook ভাল কাজ করে। তবে, navigator.userAgentData.platform রিটার্ন করে 'Android' এবং আপনার এক্সটেনশন যদি ChromeOS কীবোর্ড শর্টকাট হিন্ট (যেমন Search কী) দেখাতে বা ChromeOS-এ শুধুমাত্র API কল করতে, ব্যবহারকারীর এজেন্ট চেক করে, তাহলে সেইসব চেক 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

অন্যদিকে, Googlebook OS এবং ChromeOS, এই দু'টি জায়গাতেই navigator.userAgent একই কমে যাওয়া ইউজার-এজেন্ট স্ট্রিং রিটার্ন করে, কারণ দু'টি প্ল্যাটফর্মই ফ্রোজেন 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

অন্যান্য ওয়েব ডেভেলপমেন্টের মতো, প্ল্যাটফর্ম শনাক্তকরণ নির্ভরযোগ্য নাও হতে পারে, তাই আপনার যা প্রয়োজন তা সরাসরি পরীক্ষা করার জন্য ফিচার শনাক্তকরণ ব্যবহার করতে না পারলে তবেই এটি ব্যবহার করুন। আপনাকে যদি Android ফোন ও Chromebook, দুটির থেকেই Googlebook OS-কে আলাদা করে চিহ্নিত করার প্রয়োজন হয়, তাহলে runtime.getPlatformInfo() mobile থেকে পাওয়া ইঙ্গিত User-Agent Client Hints-এর সাথে মিলিয়ে এটি করা সম্ভব।

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-এ ইনস্টল ও রান করে, তবে কানেক্ট করার চেষ্টা ব্যর্থ হয়। নিশ্চিত করুন যে আপনার এক্সটেনশন কানেকশন সংক্রান্ত সমস্যাগুলি সাবলীলভাবে ম্যানেজ করে এবং নেটিভ হোস্ট উপলভ্য না থাকলে ওয়েব-ভিত্তিক ওয়ার্কফ্লোতে ফিরে আসে। আপডেট পেতে issue 555299632 ফলো করুন।

কীবোর্ড শর্টকাট

commands শর্টকাটগুলি Linux-এ Chrome-এর মতো একই নিয়ম মেনে চলে। Chrome, Googlebook OS-এ linux এন্ট্রি suggested_key পড়ে, তাই chromeos-এর অধীনে সংজ্ঞায়িত শর্টকাট প্রযোজ্য হয় না। Search কী কম্বিনেশনও কাজ করে না, কারণ Googlebook OS ডিভাইসে "সার্চ" কী নেই।

SharedArrayBuffer

Windows, macOS, Linux ও ChromeOS-এ, এক্সটেনশন যেকোনও প্রসঙ্গে SharedArrayBuffer অটোমেটিক ব্যবহার করতে পারে। Googlebook OS-এ, SharedArrayBuffer ব্যবহার করতে হলে এক্সটেনশনকে অবশ্যই manifest.json-এ ক্রস-অরিজিন আইসোলেশন বেছে নিতে হবে।

ক্রস-অরিজিন আইসোলেশন বেছে নিলে, পপ-আপ, বিকল্প পৃষ্ঠা ও অফস্ক্রিন ডকুমেন্ট-এর মতো এক্সটেনশন ডকুমেন্টে SharedArrayBuffer চালু হয়ে যায়। তবে, এটি এক্সটেনশন সার্ভিস ওয়ার্কারে SharedArrayBuffer চালু করে না, কারণ Chrome এখনও সার্ভিস ওয়ার্কারের জন্য ক্রস-অরিজিন আইসোলেশন (সমস্যা ৪০১৫০১৮২) কাজ করে না। আপনার ব্যাকগ্রাউন্ড লজিক যদি SharedArrayBuffer-এর উপর নির্ভর করে (যেমন, থ্রেডেড WebAssembly রান করার জন্য), তাহলে সেই কোডটি আপনার সার্ভিস ওয়ার্কারের পরিবর্তে অফস্ক্রিন ডকুমেন্টে রান করান।

শুধুমাত্র ChromeOS-এ কাজ করে এমন API

Chrome এক্সটেনশন API রেফারেন্সে শুধুমাত্র ChromeOS হিসেবে চিহ্নিত API (যেমন documentScan, fileSystemProvider, vpnProvider এবং printing) Googlebook OS-এ কাজ করে না, যদিও navigator.userAgent-এ CrOS অন্তর্ভুক্ত থাকে। যেসব এক্সটেনশন এই অনুমতি ঘোষণা করে সেগুলি এখনও ইনস্টল ও রান করে, কিন্তু রানটাইমে API নেমস্পেস undefined থাকে। ব্যবহারকারী-এজেন্ট শনাক্তকরণের উপর নির্ভর করার পরিবর্তে, কল করার আগে API নেমস্পেস আছে কিনা তা চেক করুন।

browser.system.storage

Googlebook OS-এ browser.system.storage API কাজ করে না। manifest.json-এ system.storage অনুমতি ঘোষণা করা এক্সটেনশন এখনও ইনস্টল ও রান করে, কিন্তু রানটাইমে নেমস্পেস undefined হয়। getInfo(), ejectDevice() কল করা বা স্টোরেজ লিসনার রেজিস্টার করার আগে API ডিফাইন করা হয়েছে কিনা তা চেক করুন।