Manifest V3 में ऑफ़स्क्रीन दस्तावेज़

Ian Stanion
Ian Stanion

बैकग्राउंड पेजों से एक्सटेंशन सेवा वर्कर्स पर ट्रांज़िशन के दौरान, फ़ंक्शन को बदलने के लिए, डेवलपर Chrome 109 से chrome.offscreen एपीआई और मेनिफ़ेस्ट की अनुमति का इस्तेमाल कर सकते हैं. इस अनुमति का अनुरोध करने पर, ऑफ़-स्क्रीन दस्तावेज़ बनाए जा सकते हैं. इससे, DOM API का इस्तेमाल करने के लिए, उपयोगकर्ता अनुभव में रुकावट डालने वाली नई विंडो या टैब खोलने की ज़रूरत नहीं पड़ती. chrome.offscreen एपीआई अब Chrome एक्सटेंशन में उपलब्ध है.

Chromium में, मेनिफ़ेस्ट V3 एक्सटेंशन, सर्विस वर्कर्स पर आधारित होते हैं. हालांकि, सर्विस वर्कर्स उन एपीआई और तरीकों के साथ काम नहीं करते जो पूरे दस्तावेज़ पर आधारित पेजों (जिसमें बैकग्राउंड और इवेंट पेज शामिल हैं) के साथ काम करते हैं. इसके अलावा, वेब पेजों पर DOM एपीआई को ऐक्सेस करने के लिए कॉन्टेंट स्क्रिप्ट का इस्तेमाल करने से, एक्सटेंशन को पेज के हिसाब से कॉन्टेंट की सुरक्षा से जुड़ी अलग-अलग नीतियों के हिसाब से काम करना पड़ता है. इस समस्या को हल करने के लिए, हम ऑफ़स्क्रीन दस्तावेज़ों की सुविधा लॉन्च कर रहे हैं. इससे, मेनिफ़ेस्ट V3 एक्सटेंशन को रनटाइम के दौरान, खास एपीआई की मदद से कम से कम, स्कोप वाले, और बिना अनुमति वाले ऑफ़स्क्रीन दस्तावेज़ खोलने की सुविधा मिलेगी. इससे, डीओएम से जुड़ी सुविधाओं और एपीआई को बेहतर तरीके से काम करने में मदद मिलेगी.

सुविधा की जानकारी

ऑफ़स्क्रीन दस्तावेज़ों को खास तौर पर उन इस्तेमाल के उदाहरणों को हैंडल करने के लिए डिज़ाइन किया गया है जो सेवा वर्कर में काम नहीं करते. उदाहरण के लिए, ऑडियो चलाना. इस पेज का लाइफ़टाइम और उसे दी जाने वाली अनुमतियां, एक्सटेंशन सेवा वर्कर से अलग होती हैं. इस पेज का लाइफ़टाइम, मेनिफ़ेस्ट V2 में मौजूद इवेंट पेजों की तरह ही होगा. इसका मतलब है कि जब यह कोई कार्रवाई नहीं करेगा, तब इसे हटा दिया जाएगा. इसके अलावा, उपयोगकर्ता एजेंट, बताए गए मकसद के हिसाब से लाइफ़टाइम पर और पाबंदियां लगा सकता है. ऑफ़स्क्रीन दस्तावेज़ों को उन एपीआई के अंतराल को भरने के लिए डिज़ाइन किया गया है जिन्हें सिर्फ़ DOM एपीआई ऐक्सेस कर सकते हैं. इस वजह से, एक्सटेंशन एपीआई को सीधे इस संदर्भ में एक्सपोज़ करने की ज़रूरत नहीं है. एक्सटेंशन के इनका इस्तेमाल "बैकग्राउंड पेज रिप्लेसमेंट" के तौर पर करने की संभावना को कम करने के लिए, सिर्फ़ chrome.runtime मैसेजिंग एपीआई को ऑफ़स्क्रीन दस्तावेज़ के लिए दिखाया जाता है. (डेवलपर, अपने सेवा वर्कर की मदद से, ऑफ़स्क्रीन दस्तावेज़ पर क्लाइंट के तौर पर दावा करके, वेब मैसेजिंग का इस्तेमाल भी कर सकते हैं.) कुछ इस्तेमाल के उदाहरणों के लिए, क्रॉस-ओरिजिन फ़्रेम का ऐक्सेस ज़रूरी होता है. जैसे, साइट को स्क्रैप करना. इसलिए, हम इन दस्तावेज़ों को क्रॉस-ओरिजिन फ़्रेम एम्बेड करने की अनुमति देते हैं. इसके लिए, उन दस्तावेज़ों को उन नियमों का पालन करना होगा जो एक्सटेंशन पेजों पर लागू होते हैं. ऑफ़स्क्रीन दस्तावेज़ों में, एक्सटेंशन की बताई गई कॉन्टेंट स्क्रिप्ट, इन फ़्रेम में चल सकती हैं. ऐसा, ज़रूरी कॉन्टेंट को स्क्रैप करने के लिए किया जाता है, जैसे कि वे किसी सामान्य वेब पेज के लिए करती हैं.

वजहें, और मकसद की ज़रूरत

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

भविष्य में

आसानी से लागू करने के लिए, इस एपीआई के पहले वर्शन में हर प्रोफ़ाइल और हर एक्सटेंशन के लिए, एक बार में सिर्फ़ एक पेज का इस्तेमाल किया जा सकता है. आने वाले वर्शन में, हम एक से ज़्यादा पेजों के लिए भी इस सुविधा को उपलब्ध करा सकते हैं. फ़िलहाल, अगर एक्सटेंशन, चालू गुप्त प्रोफ़ाइल के साथ स्प्लिट मोड में चल रहा है, तो सामान्य और गुप्त प्रोफ़ाइल, दोनों में से किसी एक में एक ऑफ़स्क्रीन दस्तावेज़ हो सकता है. आने वाले समय में, एक्सटेंशन वर्कर को DOM फ़ंक्शन भी दिया जाएगा. ऑफ़स्क्रीन एपीआई का इस्तेमाल करने वाले फ़ंक्शन को, बाद में बदलने के लिए, सेवा वर्कर में टिप्पणी वाले मिलते-जुलते फ़ंक्शन के साथ जोड़कर, अपने एक्सटेंशन को “आने वाले समय के हिसाब से” बनाया जा सकता है.

// Solution 1 - Service workers cannot directly interact with
// the system clipboard. To work around this, we'll create an offscreen
// document and pass the data we want to write to the clipboard.
async function addToClipboard(value) {
    await chrome.offscreen.createDocument({
      url: 'offscreen.html',
      reasons: [chrome.offscreen.Reason.CLIPBOARD],
      justification: 'Write text to the clipboard.',
    });
  }


// Solution 2 – Once extension service workers can use the Clipboard API,
// replace the offscreen document based implementation with something like this
async function addToClipboardV2(value) {
  navigator.clipboard.writeText(value);
}

इसके अलावा, सेवा वर्कर में DOM फ़ंक्शन और एपीआई जोड़े जाने के बाद, दस्तावेज़ बनाने की वजहों की सूची में कुछ और वजहें जोड़ी जाएंगी या कुछ वजहें हटा दी जाएंगी. यह सेवा वर्कर की मौजूदा स्थिति और ऑफ़स्क्रीन दस्तावेज़ों के इस्तेमाल की वजहों पर निर्भर करेगा.

नतीजा

ऑफ़स्क्रीन दस्तावेज़ों की सुविधा, उन एक्सटेंशन को अनुमति देती है जिन्हें डीओएम या विंडो इंटरैक्शन का ऐक्सेस चाहिए. फ़िलहाल, सेवा वर्कर में यह ऐक्सेस नहीं मिल सकता. इसमें एक सुविधाजनक तरीका भी दिया गया है, जिसमें इस्तेमाल के नए उदाहरण जोड़े जा सकते हैं और आने वाले समय में हल होने वाले इस्तेमाल के उदाहरण हटाए जा सकते हैं. एक्सटेंशन को खास इस्तेमाल के उदाहरणों के लिए, ऑफ़स्क्रीन दस्तावेज़ के लिए सुझाए गए एपीआई का इस्तेमाल करना चाहिए. साथ ही, एक्सटेंशन का मुख्य बैकग्राउंड कॉन्टेक्स्ट, मेनिफ़ेस्ट में बताए गए सेवा वर्कर के तौर पर बना रहना चाहिए. ऑफ़स्क्रीन दस्तावेज़ में, एक्सटेंशन का मुख्य लॉजिक स्टोर नहीं किया जाना चाहिए. इसकी वजह यह है कि इसमें एपीआई का ऐक्सेस सीमित होता है. ऑफ़स्क्रीन दस्तावेज़ का लाइफ़टाइम, उसे बनाने वाले सेवा वर्कर से अलग होता है. एक्सटेंशन में, सेवा वर्कर के लाइफ़टाइम से जुड़ी बातों और इस्तेमाल के उदाहरणों के बारे में, हम एक अलग ब्लॉग पोस्ट में बताएंगे. ऑफ़स्क्रीन दस्तावेज़ों का इस्तेमाल करने की वजहें समय के साथ बदलती रहेंगी, क्योंकि सेवा वर्कर में सुविधाएं और एपीआई जोड़े जाते रहेंगे. हम डेवलपर से इस बारे में सुझाव, राय या शिकायतें सुनना चाहते हैं.

Unsplash पर Kari Shea की ओर से अपलोड की गई फ़ोटो