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

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

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

मेनिफ़ेस्ट V3 में chrome.action की सुविधा नई है, लेकिन यह जो बुनियादी फ़ंक्शन उपलब्ध कराती है वह जनवरी 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", इस फ़ंक्शन के लिए "isPinned" की तुलना में थोड़ा अलग नाम लग सकता है. हालांकि, Chrome में की गई कार्रवाइयों के इतिहास से पता चलता है कि एक्सटेंशन एपीआई की तुलना में ब्राउज़र का यूज़र इंटरफ़ेस (यूआई) तेज़ी से बदलता है. इसलिए, इस एपीआई का हमारा मकसद, सामान्य इंटरफ़ेस पर कार्रवाई से जुड़ी उपयोगकर्ता की प्राथमिकताओं को दिखाना है, ताकि आने वाले समय में एपीआई में बदलावों की संख्या कम हो सके. इसकी मदद से, ब्राउज़र के अन्य वेंडर भी इस तरीके से दिखाए गए UserSettings ऑब्जेक्ट में, ब्राउज़र के लिए बने यूज़र इंटरफ़ेस (यूआई) के कॉन्सेप्ट दिखा सकते हैं.

दूसरा, किसी एक्सटेंशन की कार्रवाई के आइकॉन और चालू/बंद होने की स्थिति को, एलान वाले Content API का इस्तेमाल करके कंट्रोल किया जा सकता है. यह ज़रूरी है, क्योंकि इससे एक्सटेंशन, उपयोगकर्ता के ब्राउज़ करने के व्यवहार पर प्रतिक्रिया दे पाते हैं. इसके लिए, उन्हें कॉन्टेंट या उपयोगकर्ता के देखे गए पेजों के यूआरएल को ऐक्सेस करने की ज़रूरत नहीं होती. उदाहरण के लिए, आइए देखें कि जब कोई उपयोगकर्ता 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()]
      }
    ]);
  });
});

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

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

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

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

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