एक्सटेंशन के लिए सेवा वर्कर, स्टैंडर्ड सेवा वर्कर इवेंट और एक्सटेंशन एपीआई में मौजूद कई इवेंट, दोनों के साथ काम करते हैं. इस सेक्शन में, उपलब्ध सुविधाओं के बारे में बताया गया है. साथ ही, इनका इस्तेमाल करने के बारे में सलाह भी दी गई है.
एक्सटेंशन इवेंट का एलान करना
सेवा वर्कर में इवेंट हैंडलर को ग्लोबल स्कोप में एलान करना ज़रूरी है. इसका मतलब है कि उन्हें स्क्रिप्ट के सबसे ऊपरी लेवल पर होना चाहिए और फ़ंक्शन के अंदर नेस्ट नहीं किया जाना चाहिए. इससे यह पक्का होता है कि वे शुरुआती स्क्रिप्ट के लागू होने पर सिंक करके रजिस्टर हो जाएं. इससे 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
, दोनों काम करते हैं.
जब तक आपके पास सेवा वर्कर मैसेजिंग का इस्तेमाल करने की कोई खास वजह नहीं है, तब तक आपको एक्सटेंशन मैसेजिंग का इस्तेमाल करना चाहिए.