Googlebook OS के लिए, अपने एक्सटेंशन को अडैप्ट करना

Googlebook OS, Googlebook डिवाइसों के लिए एक ऑपरेटिंग सिस्टम है. इसे Android टेक्नोलॉजी स्टैक पर बनाया गया है. साथ ही, इसे ChromeOS के डेस्कटॉप फ़ाउंडेशन के साथ जोड़ा गया है. Google Books, Windows, macOS, और ChromeOS पर मौजूद WebExtensions प्लैटफ़ॉर्म के साथ काम करता है. हालांकि, इन प्लैटफ़ॉर्म पर इसके काम करने के तरीके में कुछ अंतर हैं.

  • प्लैटफ़ॉर्म का पता लगाने की सुविधा की ज़रूरत कभी-कभी ही पड़ती है. हालांकि, मौजूदा जांचें गलत हो सकती हैं, क्योंकि एक्सटेंशन एपीआई android की जानकारी देते हैं, जबकि उपयोगकर्ता एजेंट ChromeOS की जानकारी देता है.
  • नेटिव मैसेजिंग की सुविधा अभी उपलब्ध नहीं है. हालांकि, इस पर काम किया जा रहा है. यह डेस्कटॉप पर चलने वाले प्रोग्राम के बजाय, इंस्टॉल किए गए Android ऐप्लिकेशन पर मैसेज भेजता है.
  • कीबोर्ड शॉर्टकट में, chromeos एंट्री के बजाय Linux की कीबाइंडिंग का इस्तेमाल किया जाता है.
  • SharedArrayBuffer के लिए, क्रॉस-ऑरिजिन आइसोलेशन की सुविधा के लिए ऑप्ट-इन करना ज़रूरी है. साथ ही, इसे सर्विस वर्कर के बजाय एक्सटेंशन पेज या ऑफ़स्क्रीन दस्तावेज़ में चलाना चाहिए.
  • सिर्फ़ ChromeOS पर काम करने वाले एपीआई, Googlebook OS पर काम नहीं करते. भले ही, उपयोगकर्ता एजेंट Chrome OS की रिपोर्ट करता हो. इन अनुमतियों का एलान करने वाले एक्सटेंशन अब भी इंस्टॉल किए जा सकते हैं. हालांकि, एपीआई नेमस्पेस रनटाइम के दौरान undefined होते हैं.
  • browser.system.storage, Googlebook OS पर काम नहीं करता. इसलिए, रनटाइम के दौरान एपीआई नेमस्पेस undefined होता है.

प्लैटफ़ॉर्म का पता लगाना

ज़्यादातर एक्सटेंशन को Googlebook OS का पता लगाने की ज़रूरत नहीं होती. ब्राउज़र किस ऑपरेटिंग सिस्टम पर चलता है, यह देखने के बजाय वेब डेवलपमेंट के सबसे सही तरीकों का पालन करें. जैसे, सुविधा की पहचान करना और रिस्पॉन्सिव डिज़ाइन.

अगर आपका एक्सटेंशन पहले से ही ऑपरेटिंग सिस्टम की जांच करता है, तो एक्सटेंशन एपीआई और उपयोगकर्ता एजेंट, Googlebook OS पर अलग-अलग प्लैटफ़ॉर्म दिखाते हैं.

  • 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 OS को Android फ़ोन और Chromebook, दोनों से अलग करना है, तो runtime.getPlatformInfo() को User-Agent Client Hints से मिले 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 OS डिवाइसों की पहचान की जा सकती है. हालांकि, ऐसा हमेशा नहीं होता. समय के साथ, ज़्यादा डिवाइसों को शिप किया जाएगा. साथ ही, कई तरह के फ़ॉर्म फ़ैक्टर में भी डिवाइस उपलब्ध होंगे. ऐसे में, ऐसा हो सकता है कि कुछ Googlebook OS डिवाइस, इस सुविधा के साथ काम न करें.

क्लाइंट हिंट का इस्तेमाल करके, वेब पेजों या सर्वर पर Googlebooks का पता लगाने के लिए, Googlebooks की पहचान करना लेख पढ़ें.

नेटिव मैसेज सेवा

नेटिव मैसेजिंग की सुविधा, फ़िलहाल Googlebook OS पर उपलब्ध नहीं है. हालांकि, इस पर काम किया जा रहा है. इसमें ऐसे एक्सटेंशन होने चाहिए जो स्थानीय डेस्कटॉप एक्ज़ीक्यूटेबल के बजाय, इंस्टॉल किए गए Android ऐप्लिकेशन से कम्यूनिकेट करते हों. फ़िलहाल, nativeMessaging अनुमति का एलान करने वाले एक्सटेंशन, Googlebook OS पर अब भी इंस्टॉल और रन होते हैं. हालांकि, कनेक्ट करने की कोशिशें पूरी नहीं होती हैं. पक्का करें कि आपका एक्सटेंशन, कनेक्शन में होने वाली गड़बड़ियों को आसानी से ठीक कर लेता हो. साथ ही, नेटिव होस्ट के उपलब्ध न होने पर, वेब पर आधारित वर्कफ़्लो पर वापस आ जाता हो. अपडेट पाने के लिए, समस्या 555299632 को फ़ॉलो करें.

कीबोर्ड शॉर्टकट

commands शॉर्टकट, Linux पर Chrome के लिए बने नियमों के मुताबिक काम करते हैं. Chrome, Googlebook OS पर suggested_key की linux एंट्री को पढ़ता है. इसलिए, chromeos में तय किए गए शॉर्टकट लागू नहीं होते. Googlebook OS डिवाइसों पर "Search" कुंजी नहीं होती है. इसलिए, Search कुंजी के कॉम्बिनेशन भी काम नहीं करते.

SharedArrayBuffer

Windows, macOS, Linux, और ChromeOS पर एक्सटेंशन, किसी भी कॉन्टेक्स्ट में SharedArrayBuffer का इस्तेमाल अपने-आप कर सकते हैं. Googlebook OS पर, एक्सटेंशन को SharedArrayBuffer का इस्तेमाल करने के लिए, manifest.json में क्रॉस-ऑरिजिन आइसोलेशन के लिए ऑप्ट इन करना होगा.

क्रॉस-ऑरिजिन आइसोलेशन के लिए ऑप्ट इन करने से, एक्सटेंशन के दस्तावेज़ों में SharedArrayBuffer चालू हो जाता है. जैसे, पॉप-अप, विकल्प वाले पेज, और ऑफ़स्क्रीन दस्तावेज़. हालांकि, यह एक्सटेंशन सर्विस वर्कर में SharedArrayBuffer को चालू नहीं करता है. ऐसा इसलिए, क्योंकि Chrome अब तक सर्विस वर्कर के लिए क्रॉस-ऑरिजिन आइसोलेशन की सुविधा नहीं देता है (समस्या 40150182). अगर आपका बैकग्राउंड लॉजिक SharedArrayBuffer पर निर्भर करता है (उदाहरण के लिए, थ्रेड किए गए WebAssembly को चलाने के लिए), तो उस कोड को अपने सर्विस वर्कर के बजाय, ऑफ़स्क्रीन दस्तावेज़ में चलाएं.

सिर्फ़ ChromeOS के लिए उपलब्ध एपीआई

Chrome एक्सटेंशन के एपीआई रेफ़रंस में, सिर्फ़ ChromeOS के लिए के तौर पर मार्क किए गए एपीआई (जैसे कि documentScan, fileSystemProvider, vpnProvider, और printing) Googlebook OS पर काम नहीं करते. भले ही, navigator.userAgent में CrOS शामिल हो. इन अनुमतियों का एलान करने वाले एक्सटेंशन अब भी इंस्टॉल और चालू होते हैं. हालांकि, रनटाइम के दौरान एपीआई नेमस्पेस undefined होते हैं. उपयोगकर्ता-एजेंट का पता लगाने के बजाय, एपीआई को कॉल करने से पहले यह देखें कि कोई एपीआई नेमस्पेस मौजूद है या नहीं.

browser.system.storage

browser.system.storage एपीआई, Googlebook OS पर काम नहीं करता. manifest.json में system.storage अनुमति का एलान करने वाले एक्सटेंशन अब भी इंस्टॉल और चलते हैं. हालांकि, रनटाइम के दौरान नेमस्पेस undefined होता है. जांच करें कि getInfo(), ejectDevice() को कॉल करने या स्टोरेज लिसनर रजिस्टर करने से पहले, एपीआई को तय किया गया हो.