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

एक्सटेंशन सर्विस वर्कर, स्टैंडर्ड सर्विस वर्कर इवेंट और एक्सटेंशन 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 दोनों है.

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