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

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

एक्सटेंशन इवेंट के बारे में जानकारी देना

सर्विस वर्कर में इवेंट हैंडलर को ग्लोबल स्कोप में एलान करना होता है. इसका मतलब है कि उन्हें स्क्रिप्ट के टॉप लेवल पर होना चाहिए और फ़ंक्शन के अंदर नेस्ट नहीं किया जाना चाहिए. इससे यह पक्का होता है कि स्क्रिप्ट के शुरुआती एक्ज़ीक्यूशन पर, ये सिंक्रोनस तरीके से रजिस्टर हो जाएं. इससे Chrome, सर्विस वर्कर के शुरू होते ही उसे इवेंट भेज पाता है. उदाहरण के लिए:

सलाह नहीं दी जाती
browser.storage.local.get(["badgeText"], ({ badgeText }) => {
  browser.action.setBadgeText({ text: badgeText });
  browser.action.onClicked.addListener(handleActionClick);
});
बेहतर राय बनी
browser.action.onClicked.addListener(handleActionClick);

browser.storage.local.get(["badgeText"], ({ badgeText }) => {
  browser.action.setBadgeText({ text: badgeText });
});

सामान्य इवेंट

एक्सटेंशन सर्विस वर्कर, कुछ खास एपीआई में इवेंट के साथ काम करते हैं. यहां कुछ सामान्य वजहों के बारे में बताया गया है. ध्यान दें कि इनमें से कुछ एपीआई का इस्तेमाल करने के लिए अनुमतियों की ज़रूरत होती है. साथ ही, ऐसा हो सकता है कि कुछ एपीआई में ऐसे इवेंट, तरीके या प्रॉपर्टी हों जो Chrome के सभी वर्शन में उपलब्ध न हों. ज़्यादा जानकारी के लिए, लिंक किया गया एपीआई दस्तावेज़ देखें. खास तौर पर, वे इवेंट, तरीके या प्रॉपर्टी देखें जिनका आपको इस्तेमाल करना है.

browser.action
यह इवेंट, एक्सटेंशन के टूलबार आइकॉन के साथ उपयोगकर्ता के इंटरैक्शन के जवाब में ट्रिगर होता है. यह इंटरैक्शन किसी खास पेज (टैब) या पूरे एक्सटेंशन के लिए हो सकता है.
browser.management
यह एक्सटेंशन को इंस्टॉल, अनइंस्टॉल, चालू, और बंद करने से जुड़े इवेंट उपलब्ध कराता है.
browser.notifications
यह एक्सटेंशन से जनरेट हुई सिस्टम सूचनाओं के साथ उपयोगकर्ता के इंटरैक्शन से जुड़े इवेंट उपलब्ध कराता है.
browser.permissions
इससे पता चलता है कि उपयोगकर्ता ने एक्सटेंशन को अनुमतियां कब दी हैं या कब वापस ली हैं.
browser.runtime
यह एक्सटेंशन के लाइफ़साइकल, एक्सटेंशन के अन्य हिस्सों से भेजे गए मैसेज, और उपलब्ध एक्सटेंशन या Chrome के अपडेट की सूचना से जुड़े इवेंट उपलब्ध कराता है.
browser.storage.onChanged
जब भी कोई StorageArea ऑब्जेक्ट मिटाया जाता है या किसी कुंजी की वैल्यू बदली जाती है या सेट की जाती है, तब यह इवेंट ट्रिगर होता है. ध्यान दें कि हर StorageArea इंस्टेंस का अपना onChanged इवेंट होता है.
browser.webNavigation
इससे फ़्लाइट के दौरान नेविगेशन के अनुरोधों की स्थिति के बारे में जानकारी मिलती है.

फ़िल्टर

इवेंट को इस्तेमाल के किसी खास उदाहरण तक सीमित करने या गैर-ज़रूरी इवेंट कॉल हटाने के लिए, ऐसे एपीआई का इस्तेमाल करें जो इवेंट फ़िल्टर के साथ काम करते हैं. उदाहरण के लिए, मान लें कि कोई एक्सटेंशन tabs.onUpdated इवेंट को सुन रहा है. इससे यह पता चलता है कि कोई उपयोगकर्ता किसी वेबसाइट पर कब जाता है. इस इवेंट को हर टैब पर हर नेविगेशन पर कॉल किया जाएगा. इसके बजाय, फ़िल्टर के साथ webNavigation.onCompleted का इस्तेमाल करें. उदाहरण के लिए:

const filter = {
  url: [
    {
      urlMatches: 'https://www.google.com/',
    },
  ],
};

browser.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 और browser.runtime.onMessage, दोनों का इस्तेमाल किया जा सकता है.

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