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 ऑब्जेक्ट में, ब्राउज़र के हिसाब से यूज़र इंटरफ़ेस के कॉन्सेप्ट दिखा सकते हैं.

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