Manifest V3 में एक्सटेंशन ऐक्शन

सिमियोन विन्सेंट
सिमियन विंसेंट

'Chrome एक्सटेंशन' लॉन्च होने के बाद से ही, इस प्लैटफ़ॉर्म पर डेवलपर कार्रवाइयां का इस्तेमाल करके, एक्सटेंशन की सुविधाओं को सीधे Chrome के यूआई में सबसे ऊपर के लेवल पर दिखा सकते हैं. कार्रवाई एक आइकॉन बटन होती है, जो पॉप-अप खोल सकती है या एक्सटेंशन में कुछ फ़ंक्शन ट्रिगर कर सकती है. अब तक, Chrome दो तरह की कार्रवाइयों, ब्राउज़र ऐक्शन, और पेज ऐक्शन का इस्तेमाल करता था. मेनिफ़ेस्ट V3 ने अपनी सुविधाओं को नए chrome.action एपीआई में इकट्ठा करके, इसे बदला है.

एक्सटेंशन की कार्रवाइयों का छोटा इतिहास

chrome.action, मेनिफ़ेस्ट V3 में एक नई सुविधा है. यह जनवरी, 2010 में एक्सटेंशन के पहली बार स्टेबल होने के बाद की बुनियादी सुविधा देती है. Chrome के एक्सटेंशन प्लैटफ़ॉर्म के पहले और ठीक से काम करने वाले वर्शन में, दो अलग-अलग तरह की कार्रवाइयों का इस्तेमाल किया गया: ब्राउज़र ऐक्शन और पेज ऐक्शन.

ब्राउज़र कार्रवाइयों की मदद से एक्सटेंशन डेवलपर "पता बार के दाईं ओर, मुख्य Google Chrome टूलबार में" (सोर्स) आइकॉन दिखा सकते थे. इससे उपयोगकर्ताओं को किसी भी पेज पर एक्सटेंशन फ़ंक्शन को ट्रिगर करने का आसान तरीका मुहैया कराया गया. वहीं दूसरी ओर, पेज पर की जाने वाली कार्रवाइयों का मकसद, "ऐसी कार्रवाइयां दिखाना था जिन्हें मौजूदा पेज पर किया जा सकता है, लेकिन वे सभी पेजों पर लागू नहीं होतीं" (सोर्स).

खोज वाली पट्टी में एक पेज कार्रवाई (बाएं) दिखाई देती है, जिससे पता चलता है कि एक्सटेंशन इस पेज पर कुछ कर सकता है. ब्राउज़र की कार्रवाई (दाएं) हमेशा दिखती है.

दूसरे शब्दों में, ब्राउज़र कार्रवाइयों ने एक्सटेंशन डेवलपर को ब्राउज़र में एक स्थायी यूज़र इंटरफ़ेस (यूआई) सतह दिया, जबकि पेज की कार्रवाइयां सिर्फ़ तब दिखीं, जब एक्सटेंशन मौजूदा पेज के लिए कुछ काम का था.

दोनों तरह की कार्रवाइयां वैकल्पिक थीं. इसलिए, एक्सटेंशन डेवलपर कोई कार्रवाई न करने, पेज पर की जाने वाली कार्रवाई या ब्राउज़र कार्रवाई (एक से ज़्यादा कार्रवाइयों को तय करने की अनुमति नहीं है) देने का विकल्प चुन सकता है.

करीब छह साल बाद, Chrome 49 ने एक्सटेंशन के लिए एक नया यूज़र इंटरफ़ेस (यूआई) मॉडल पेश किया. उपयोगकर्ताओं को यह समझने में मदद करने के लिए कि उनके पास कौनसे एक्सटेंशन हैं, Chrome ने खोज वाली पट्टी की दाईं ओर सभी चालू एक्सटेंशन दिखाना शुरू कर दिया है. अगर उपयोगकर्ता चाहें, तो वे Chrome मेन्यू में एक्सटेंशन "ओवरफ़्लो" कर सकते थे.

छिपे हुए एक्सटेंशन आइकॉन, Chrome मेन्यू में दिखेंगे.

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

बंद की गई पेज कार्रवाई (बाएं) को टूलबार में ग्रेस्केल इमेज के रूप में दिखाया जाता है, जबकि चालू की गई कोई कार्रवाई (दाएं) पूरे रंग में दिखती है.

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

मेनिफ़ेस्ट V3 में हुए बदलाव

2016 में एक्सटेंशन यूज़र इंटरफ़ेस (यूआई) को फिर से डिज़ाइन करने के बाद, Chrome के यूआई और एक्सटेंशन लगातार बेहतर होते जा रहे थे. हालांकि, ब्राउज़र की कार्रवाइयों और पेज से जुड़ी कार्रवाइयों में काफ़ी हद तक कोई बदलाव नहीं हुआ. यह तब तक जारी रहेगा, जब तक कि हमने मेनिफ़ेस्ट V3 की मदद से, एक्सटेंशन प्लैटफ़ॉर्म को मॉडर्न बनाने की योजना नहीं बनाई.

एक्सटेंशन टीम को यह साफ़ तौर पर बताया गया था कि ब्राउज़र ऐक्शन और पेज ऐक्शन को बिना किसी मतलब के अलग-अलग पहचान की जा रही थी. इससे भी बुरा यह है कि उनके सूक्ष्म व्यवहार में अंतर की वजह से डेवलपर के लिए यह तय करना मुश्किल हो गया था कि किसका इस्तेमाल करना है. हमने महसूस किया कि हम ब्राउज़र ऐक्शन और पेज ऐक्शन को एक साथ "कार्रवाई" में जोड़कर इन समस्याओं को हल कर सकते हैं.

Action API डालें. chrome.action, सीधे तौर पर chrome.browserAction जैसा है. हालांकि, इसमें कुछ खास अंतर हैं.

सबसे पहले, chrome.action, getUserSettings() नाम का नया तरीका उपलब्ध कराता है. इस तरीके से एक्सटेंशन डेवलपर यह देख सकते हैं कि उपयोगकर्ता ने अपने एक्सटेंशन की कार्रवाई को टूलबार पर पिन किया है या नहीं.

let userSettings = await chrome.action.getUserSettings();
console.log(`Is the action pinned? ${userSettings.isOnToolbar ? 'Yes' : 'No'}.`);

"getUserSettings" इस फ़ंक्शन के लिए एक असामान्य नाम लग सकता है, जैसे कि "पिन किया गया", लेकिन Chrome की कार्रवाइयों के इतिहास से पता चलता है कि एक्सटेंशन एपीआई की तुलना में, ब्राउज़र के यूज़र इंटरफ़ेस (यूआई) तेज़ी से बदलते हैं. इस एपीआई की मदद से, हमारा मकसद है कि एपीआई के चर्न आउट को कम करने के लिए, इस एपीआई का इस्तेमाल करके, उपयोगकर्ता की पसंद को जनरेटिक इंटरफ़ेस पर दिखाना हो. इसकी मदद से, अन्य ब्राउज़र वेंडर भी इस तरीके से दिखाए गए UserSettings ऑब्जेक्ट में, ब्राउज़र के खास यूज़र इंटरफ़ेस (यूआई) कॉन्सेप्ट को दिखा सकते हैं.

दूसरा, किसी एक्सटेंशन की कार्रवाई के आइकॉन और चालू/बंद होने की स्थिति को घोषणात्मक कॉन्टेंट एपीआई का इस्तेमाल करके नियंत्रित किया जा सकता है. ऐसा इसलिए ज़रूरी है, क्योंकि इससे एक्सटेंशन, उपयोगकर्ता के ब्राउज़िंग व्यवहार पर प्रतिक्रिया देते हैं. इसके लिए, एक्सटेंशन को उपयोगकर्ता के कॉन्टेंट या पेजों के यूआरएल को ऐक्सेस नहीं करना पड़ता. उदाहरण के लिए, आइए देखें कि जब कोई उपयोगकर्ता example.com के पेजों पर जाता है, तो कोई एक्सटेंशन अपनी कार्रवाई कैसे चालू कर सकता है.

// Manifest V3
chrome.runtime.onInstalled.addListener(() => {
  chrome.declarativeContent.onPageChanged.removeRules(undefined, () => {
    chrome.declarativeContent.onPageChanged.addRules([
      {
        conditions: [
          new chrome.declarativeContent.PageStateMatcher({
            pageUrl: {hostSuffix: '.example.com'},
          })
        ],
        actions: [new chrome.declarativeContent.ShowAction()]
      }
    ]);
  });
});

ऊपर दिया गया कोड करीब-करीब वैसा ही है जैसा कोई एक्सटेंशन पेज पर की जाने वाली कार्रवाई के साथ करता है. सिर्फ़ मेनिफ़ेस्ट V3 में अंतर यह है कि हमने मेनिफ़ेस्ट V2 में declarativeContent.ShowPageAction के बजाय, declarativeContent.ShowAction का इस्तेमाल किया है.

आखिर में, कॉन्टेंट ब्लॉकर, declarativeNetRequest एपीआई के setExtensionActionOptions) तरीके का इस्तेमाल करके, दिए गए किसी टैब के लिए, एक्सटेंशन से ब्लॉक किए गए अनुरोधों की संख्या दिखा सकते हैं. यह सुविधा अहम है, क्योंकि इससे कॉन्टेंट ब्लॉक करने वाले लोगों को, असली उपयोगकर्ताओं को जानकारी देने में मदद मिलती है. इसके लिए, एक्सटेंशन में संभावित संवेदनशील ब्राउज़िंग मेटाडेटा की जानकारी नहीं होती.

आखिर में खास जानकारी

Chrome एक्सटेंशन प्लैटफ़ॉर्म को आधुनिक बनाना, मेनिफ़ेस्ट V3 की सबसे अहम वजहों में से एक था. कई मामलों में, हम नई टेक्नोलॉजी पर स्विच करना चाहते थे, लेकिन इसका मतलब अपने एपीआई के प्लैटफ़ॉर्म को आसान बनाना भी था. हमारा लक्ष्य यही था.

मुझे उम्मीद है कि इस पोस्ट से, मेनिफ़ेस्ट V3 प्लैटफ़ॉर्म के इस कोने के बारे में कुछ जानकारी मिली होगी. Chrome की टीम, आने वाले समय में ब्राउज़र एक्सटेंशन के इस्तेमाल को लेकर किस तरह से आगे आएगी, इस बारे में ज़्यादा जानने के लिए हमारे डेवलपर दस्तावेज़ में प्लैटफ़ॉर्म विज़न और मेनिफ़ेस्ट V3 की खास जानकारी देखें. Chromium-extensions के Google Group पर अन्य डेवलपर के साथ Chrome एक्सटेंशन के बारे में चर्चा भी की जा सकती है.