एक्सटेंशन सर्विस वर्कर, स्टैंडर्ड सर्विस वर्कर इवेंट और एक्सटेंशन API में कई इवेंट, दोनों के साथ काम करते हैं. इस सेक्शन में उपलब्ध सुविधाओं के बारे में बताया गया है. साथ ही, इनका इस्तेमाल करने के बारे में सलाह दी गई है.
एक्सटेंशन इवेंट का एलान करना
सर्विस वर्कर के इवेंट हैंडलर, ग्लोबल स्कोप में तय किए जाने चाहिए. इसका मतलब है कि उन्हें स्क्रिप्ट के टॉप लेवल पर होना चाहिए और फ़ंक्शन के अंदर नेस्ट नहीं किया जाना चाहिए. इससे यह पक्का हो जाता है कि वे शुरुआती स्क्रिप्ट एक्ज़ीक्यूशन पर सिंक्रोनस रूप से रजिस्टर हैं. इससे Chrome, इवेंट के शुरू होते ही उसे सर्विस वर्कर को भेज पाता है. उदाहरण के लिए:
chrome.storage.local.get(["badgeText"], ({ badgeText }) => { chrome.action.setBadgeText({ text: badgeText }); chrome.action.onClicked.addListener(handleActionClick); });
chrome.action.onClicked.addListener(handleActionClick); chrome.storage.local.get(["badgeText"], ({ badgeText }) => { chrome.action.setBadgeText({ text: badgeText }); });
सामान्य इवेंट
एक्सटेंशन सर्विस वर्कर, खास एपीआई में इवेंट के साथ काम करते हैं. यहां कुछ सामान्य जानकारी दी गई है. ध्यान दें कि इनमें से कुछ एपीआई को इस्तेमाल करने के लिए अनुमतियों की ज़रूरत होती है. साथ ही, अन्य एपीआई में ऐसे इवेंट, तरीके या प्रॉपर्टी हो सकती हैं जो Chrome के सभी वर्शन में उपलब्ध नहीं हैं. ज़्यादा जानकारी के लिए, लिंक किए गए एपीआई के दस्तावेज़ देखें. खास तौर पर, ऐसे इवेंट, तरीके या प्रॉपर्टी देखें जिनका आपको इस्तेमाल करना है.
chrome.action
- आपके एक्सटेंशन के टूलबार आइकॉन से किसी उपयोगकर्ता के इंटरैक्शन की वजह से सक्रिय किया जाता है, चाहे वह कार्रवाई किसी खास पेज (टैब) के लिए हो या पूरे एक्सटेंशन के लिए.
chrome.management
- एक्सटेंशन को इंस्टॉल करने, अनइंस्टॉल करने, चालू करने, और बंद करने से जुड़े इवेंट की जानकारी देता है.
chrome.notifications
- यह एक्सटेंशन से जनरेट की गई, सिस्टम से जुड़ी सूचनाओं के साथ उपयोगकर्ता के इंटरैक्शन से जुड़े इवेंट की जानकारी देता है.
chrome.permissions
- यह बताता है कि उपयोगकर्ता ने एक्सटेंशन की अनुमतियां कब दी हैं या उन्हें कब वापस लिया है.
chrome.runtime
- यह एक्सटेंशन लाइफ़साइकल से जुड़े इवेंट, एक्सटेंशन के अन्य हिस्सों से भेजे गए मैसेज, और उपलब्ध एक्सटेंशन या Chrome अपडेट की सूचना देता है.
chrome.storage.onChanged
- जब भी कोई
StorageArea
ऑब्जेक्ट हटाया जाता है या किसी कुंजी का मान बदला या सेट किया जाता है, तब सक्रिय होता है. ध्यान दें कि हरStorageArea
इंस्टेंस का अपनाonChanged
इवेंट होता है. chrome.webNavigation
- इन-फ़्लाइट नेविगेशन अनुरोधों की स्थिति के बारे में जानकारी देता है.
फ़िल्टर
इवेंट को किसी खास इस्तेमाल के उदाहरण तक सीमित करने या बेवजह के इवेंट कॉल को हटाने के लिए, इवेंट फ़िल्टर के साथ काम करने वाले एपीआई का इस्तेमाल करें. उदाहरण के लिए, उपयोगकर्ता के किसी खास वेबसाइट पर नेविगेट करने के समय का पता लगाने के लिए, tabs.onUpdated
इवेंट को सुनने वाला एक्सटेंशन मानें. हर टैब पर मौजूद हर नेविगेशन पर यह इवेंट कॉल किया जाएगा. इसके बजाय, फ़िल्टर के साथ webNavigation.onCompleted
का इस्तेमाल करें. उदाहरण के लिए:
const filter = {
url: [
{
urlMatches: 'https://www.google.com/',
},
],
};
chrome.webNavigation.onCompleted.addListener(() => {
console.info("The user has loaded my favorite website!");
}, filter);
वेब सर्विस वर्कर के इवेंट
एक्सटेंशन सर्विस वर्कर, लाइफ़साइकल इवेंट से ज़्यादा काम करते हैं. इनके बारे में दूसरी जगहों पर बताया गया है.
ServiceWorkerGlobal.fetch
एक्सटेंशन पैकेज से कोई भी डेटा पाए जाने पर या किसी एक्सटेंशन या पॉप-अप स्क्रिप्ट से fetch()
और XMLHttpRequest()
को कॉल किए जाने पर सक्रिय होता है. (सर्विस वर्कर fetch
हैंडलर की ओर से कॉन्टेंट स्क्रिप्ट के कॉल को बीच में नहीं रोका जाता.) बाद के मामलों में, आपको उन पेजों के यूआरएल को manifest.json
में "host_permissions"
कुंजी में जोड़ना होगा जिन्हें आपको फ़ेच करना है.
ServiceWorkerGlobal.message
सर्विस वर्कर मैसेज पास करने की सुविधा, एक्सटेंशन मैसेज पासिंग के साथ उपलब्ध है, लेकिन दोनों सिस्टम इंटरऑपरेबल नहीं हैं. इसका मतलब है कि sendMessage()
का इस्तेमाल करके भेजे गए मैसेज, सर्विस वर्कर मैसेज हैंडलर से बीच में नहीं पहुंचते. यह सुविधा कई एक्सटेंशन एपीआई पर उपलब्ध है. इसी तरह, postMessage()
का इस्तेमाल करके भेजे गए मैसेज, एक्सटेंशन मैसेज हैंडलर से बीच में नहीं रोके जाते. एक्सटेंशन सर्विस वर्कर में, दोनों तरह के मैसेज हैंडलर इस्तेमाल किए जा सकते हैं. मैसेज हैंडलर का मतलब ServiceWorkerGlobal.message
और chrome.runtime.onMessage
दोनों है.
आपको तब तक एक्सटेंशन मैसेज सेवा को प्राथमिकता देनी चाहिए, जब तक आपके पास सर्विस वर्कर मैसेज सेवा का इस्तेमाल करने की कोई खास वजह न हो.