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