सर्विस वर्कर के इवेंट

एक्सटेंशन के लिए सेवा वर्कर, स्टैंडर्ड सेवा वर्कर इवेंट और एक्सटेंशन एपीआई में मौजूद कई इवेंट, दोनों के साथ काम करते हैं. इस सेक्शन में, उपलब्ध सुविधाओं के बारे में बताया गया है. साथ ही, इनका इस्तेमाल करने के बारे में सलाह भी दी गई है.

एक्सटेंशन इवेंट का एलान करना

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

जब तक आपके पास सेवा वर्कर मैसेजिंग का इस्तेमाल करने की कोई खास वजह नहीं है, तब तक आपको एक्सटेंशन मैसेजिंग का इस्तेमाल करना चाहिए.