बैकग्राउंड पेजों से एक्सटेंशन सर्विस वर्कर पर ट्रांज़िशन की प्रोसेस के फ़ंक्शन को बदलने के लिए, डेवलपर Chrome 109 और उसके बाद के वर्शन में chrome.offscreen
एपीआई और मेनिफ़ेस्ट फ़ाइल की अनुमति का इस्तेमाल कर सकते हैं. इस अनुमति का अनुरोध करने से, स्क्रीन पर न होने वाले दस्तावेज़ बनाए जा सकते हैं और उपयोगकर्ता अनुभव में रुकावट डालने वाली नई विंडो या टैब बिना रुकावट के खोले बिना, DOM API का इस्तेमाल किया जा सकता है. chrome.offscreen
एपीआई अब Chrome एक्सटेंशन में उपलब्ध है.
Chromium में, Manifest V3 एक्सटेंशन, सर्विस वर्कर पर आधारित होते हैं. हालांकि, सर्विस वर्कर उन एपीआई और मैकेनिज़्म के लिए सहायता नहीं देते जो दस्तावेज़ पर आधारित पूरे पेज (इनमें बैकग्राउंड और इवेंट पेज शामिल हैं) के लिए सहायता उपलब्ध कराते हैं. इसके अलावा, वेब पेजों पर DOM API को ऐक्सेस करने के लिए कॉन्टेंट स्क्रिप्ट का इस्तेमाल करने पर, अलग-अलग कॉन्टेंट सुरक्षा नीतियों के तहत एक्सटेंशन को पेज-टू-पेज के हिसाब से हटा दिया जाता है. हम इस समस्या को हल करने के लिए, ऑफ़स्क्रीन दस्तावेज़ लॉन्च कर रहे हैं. इसमें, डीओएम से जुड़ी सुविधाएं और एपीआई काम करेंगे. इसके लिए, मेनिफ़ेस्ट 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 फ़ंक्शन और एपीआई जोड़े जाते हैं, इसलिए दस्तावेज़ बनाने की वजहों की सूची, सर्विस वर्कर की मौजूदा स्थिति और ऑफ़स्क्रीन दस्तावेज़ों को इस्तेमाल करने की वजहों के आधार पर जोड़ी या कम की जाएगी.
नतीजा
ऑफ़स्क्रीन दस्तावेज़, ऐसे एक्सटेंशन को अनुमति देते हैं जिन्हें डीओएम या विंडो इंटरैक्शन के ऐक्सेस की ज़रूरत होती है. फ़िलहाल, इन्हें सर्विस वर्कर को नहीं दिया जा सकता. यह आसान तरीका भी देता है, जहां इस्तेमाल के नए उदाहरण जोड़े जा सकते हैं और आने वाले समय में हल किए जाने वाले इस्तेमाल के उदाहरणों को हटाया जा सकता है. एक्सटेंशन को, इस्तेमाल के खास उदाहरणों के लिए, प्रस्तावित ऑफ़स्क्रीन दस्तावेज़ एपीआई का इस्तेमाल करना चाहिए. साथ ही, एक्सटेंशन के मुख्य बैकग्राउंड का संदर्भ, मेनिफ़ेस्ट में बताए गए सर्विस वर्कर के तौर पर ही रहना चाहिए. ऑफ़स्क्रीन दस्तावेज़ को प्राइमरी एक्सटेंशन लॉजिक को सेव नहीं किया जाना चाहिए, क्योंकि इसमें एपीआई का सीमित ऐक्सेस होता है. किसी ऑफ़स्क्रीन दस्तावेज़ को कितने समय तक इस्तेमाल किया जा सकता है, यह उस सर्विस वर्कर पर निर्भर नहीं करता है जिसने उसे बनाया था. एक्सटेंशन में सर्विस वर्कर के लाइफ़टाइम से जुड़े इस्तेमाल के उदाहरण और सर्विस वर्कर के लाइफ़टाइम विचार एक अलग ब्लॉग पोस्ट में कवर किए जाएंगे. ऑफ़स्क्रीन दस्तावेज़ों का इस्तेमाल करने की वजहों में समय के साथ बदलाव होता रहेगा, क्योंकि सर्विस वर्कर में ही सुविधाएं और एपीआई जुड़ जाते हैं. हम इसके बारे में डेवलपर के सुझाव, शिकायत या राय जानना चाहते हैं.