ब्यौरा
chrome.events नेमस्पेस में, सामान्य टाइप होते हैं. इनका इस्तेमाल एपीआई करते हैं. ये एपीआई, इवेंट डिसपैच करते हैं, ताकि आपको किसी दिलचस्प गतिविधि के बारे में सूचना दी जा सके.
कॉन्सेप्ट और इस्तेमाल करने का तरीका
Event एक ऐसा ऑब्जेक्ट होता है जो आपको किसी दिलचस्प घटना के बारे में सूचना देता है. अलार्म बंद होने पर सूचना पाने के लिए, browser.alarms.onAlarm इवेंट का इस्तेमाल करने का उदाहरण यहां दिया गया है:
browser.alarms.onAlarm.addListener((alarm) => {
appendToLog(`alarms.onAlarm -- name: ${alarm.name}, scheduledTime: ${alarm.scheduledTime}`);
});
उदाहरण में दिखाया गया है कि addListener() का इस्तेमाल करके, सूचना पाने के लिए रजिस्टर किया जाता है. addListener() के लिए आर्ग्युमेंट हमेशा एक ऐसा फ़ंक्शन होता है जिसे आपने इवेंट को हैंडल करने के लिए तय किया है. हालांकि, फ़ंक्शन के पैरामीटर इस बात पर निर्भर करते हैं कि आपको कौनसे इवेंट को हैंडल करना है. alarms.onAlarm के दस्तावेज़ में जाकर, यह देखा जा सकता है कि इस फ़ंक्शन में सिर्फ़ एक पैरामीटर होता है: एक alarms.Alarm ऑब्जेक्ट, जिसमें अलार्म के बारे में जानकारी होती है.
इवेंट का इस्तेमाल करने वाले एपीआई के उदाहरण: alarms, i18n, identity, runtime. ज़्यादातर Chrome API ऐसा करते हैं.
डिक्लेरेटिव इवेंट हैंडलर
डिक्लेरेटिव इवेंट हैंडलर, डिक्लेरेटिव शर्तों और कार्रवाइयों वाले नियमों को तय करने का तरीका उपलब्ध कराते हैं. शर्तों का आकलन JavaScript इंजन के बजाय ब्राउज़र में किया जाता है. इससे राउंडट्रिप में लगने वाला समय कम हो जाता है और ज़्यादा असरदार तरीके से काम किया जा सकता है.
डिक्लेरेटिव इवेंट हैंडलर का इस्तेमाल, उदाहरण के लिए Declarative Content API में किया जाता है. इस पेज पर, सभी डिक्लेरेटिव इवेंट हैंडलर के बुनियादी सिद्धांतों के बारे में बताया गया है.
नियम
सबसे आसान नियम में एक या उससे ज़्यादा शर्तें और एक या उससे ज़्यादा कार्रवाइयां होती हैं:
const rule = {
conditions: [ /* my conditions */ ],
actions: [ /* my actions */ ]
};
अगर कोई भी शर्त पूरी होती है, तो सभी कार्रवाइयां पूरी की जाती हैं.
शर्तों और कार्रवाइयों के अलावा, हर नियम को एक आइडेंटिफ़ायर दिया जा सकता है. इससे पहले से रजिस्टर किए गए नियमों को आसानी से अनरजिस्टर किया जा सकता है. साथ ही, नियमों के बीच प्राथमिकता तय करने के लिए, उन्हें प्राथमिकता दी जा सकती है. प्राथमिकताओं पर तब ही विचार किया जाता है, जब नियमों का एक-दूसरे से टकराव होता है या उन्हें किसी खास क्रम में लागू करना होता है. कार्रवाइयां, नियमों की प्राथमिकता के घटते क्रम में लागू की जाती हैं.
const rule = {
id: "my rule", // optional, will be generated if not set.
priority: 100, // optional, defaults to 100.
conditions: [ /* my conditions */ ],
actions: [ /* my actions */ ]
};
इवेंट ऑब्जेक्ट
इवेंट ऑब्जेक्ट के लिए नियम लागू किए जा सकते हैं. ये इवेंट ऑब्जेक्ट, इवेंट होने पर कॉलबैक फ़ंक्शन को कॉल नहीं करते. हालांकि, ये यह जांच करते हैं कि क्या किसी रजिस्टर किए गए नियम की कम से कम एक शर्त पूरी हुई है. साथ ही, इस नियम से जुड़ी कार्रवाइयों को लागू करते हैं. डिक्लेरेटिव एपीआई के साथ काम करने वाले इवेंट ऑब्जेक्ट में तीन
काम के तरीके होते हैं: events.Event.addRules(), events.Event.removeRules(), और
events.Event.getRules().
नियम जोड़ना
नियम जोड़ने के लिए, इवेंट ऑब्जेक्ट के addRules() फ़ंक्शन को कॉल करें. यह फ़ंक्शन, नियम के इंस्टेंस की एक ऐरे को पहले पैरामीटर के तौर पर लेता है. साथ ही, यह एक कॉलबैक फ़ंक्शन लेता है, जिसे पूरा होने पर कॉल किया जाता है.
const rule_list = [rule1, rule2, ...];
addRules(rule_list, (details) => {...});
अगर नियमों को सही तरीके से डाला गया है, तो details पैरामीटर में डाले गए नियमों का एक कलेक्शन होता है. ये नियम, पास किए गए rule_list में मौजूद नियमों के क्रम में ही दिखते हैं. साथ ही, id और priority जैसे वैकल्पिक पैरामीटर, जनरेट की गई वैल्यू के साथ भरे जाते हैं. अगर कोई नियम अमान्य है, तो कोई भी नियम नहीं जोड़ा जाता. उदाहरण के लिए, अगर नियम में कोई अमान्य शर्त या कार्रवाई शामिल है, तो ऐसा होता है. साथ ही, जब कॉलबैक फ़ंक्शन को कॉल किया जाता है, तब runtime.lastError वैरिएबल सेट होता है. rule_list में मौजूद हर नियम में एक यूनीक आइडेंटिफ़ायर होना चाहिए. यह आइडेंटिफ़ायर, किसी दूसरे नियम या खाली आइडेंटिफ़ायर के लिए इस्तेमाल नहीं किया गया हो.
नियमों को हटाना
नियमों को हटाने के लिए, removeRules() फ़ंक्शन को कॉल करें. यह नियम के आइडेंटिफ़ायर की एक वैकल्पिक ऐरे को पहले पैरामीटर के तौर पर स्वीकार करता है. साथ ही, कॉलबैक फ़ंक्शन को दूसरे पैरामीटर के तौर पर स्वीकार करता है.
const rule_ids = ["id1", "id2", ...];
removeRules(rule_ids, () => {...});
अगर rule_ids आइडेंटिफ़ायर का एक कलेक्शन है, तो कलेक्शन में शामिल आइडेंटिफ़ायर वाले सभी नियमों को हटा दिया जाता है. अगर rule_ids में कोई ऐसा आइडेंटिफ़ायर शामिल है जिसके बारे में जानकारी नहीं है, तो इस आइडेंटिफ़ायर को अनदेखा कर दिया जाता है. अगर rule_ids को undefined पर सेट किया जाता है, तो इस एक्सटेंशन के सभी रजिस्टर किए गए नियम हटा दिए जाते हैं. नियमों को हटाए जाने पर, callback()
फ़ंक्शन को कॉल किया जाता है.
नियम वापस पाना
रजिस्टर किए गए नियमों की सूची पाने के लिए, getRules() फ़ंक्शन को कॉल करें. यह removeRules() के जैसे ही सिमैंटिक वाले नियम आइडेंटिफ़ायर के एक वैकल्पिक कलेक्शन और कॉलबैक फ़ंक्शन को स्वीकार करता है.
const rule_ids = ["id1", "id2", ...];
getRules(rule_ids, (details) => {...});
callback() फ़ंक्शन को पास किया गया details पैरामीटर, नियमों की एक ऐसी श्रेणी को दिखाता है जिसमें भरे गए वैकल्पिक पैरामीटर शामिल होते हैं.
परफ़ॉर्मेंस
बेहतरीन परफ़ॉर्मेंस पाने के लिए, आपको इन दिशा-निर्देशों का ध्यान रखना चाहिए.
एक साथ कई नियमों को रजिस्टर और अनरजिस्टर करें. हर रजिस्ट्रेशन या अनरजिस्ट्रेशन के बाद, Chrome को इंटरनल डेटा स्ट्रक्चर अपडेट करने होते हैं. इस अपडेट में ज़्यादा समय लगता है.
const rule1 = {...}; const rule2 = {...}; browser.declarativeWebRequest.onRequest.addRules([rule1]); browser.declarativeWebRequest.onRequest.addRules([rule2]);
const rule1 = {...}; const rule2 = {...}; browser.declarativeWebRequest.onRequest.addRules([rule1, rule2]);
events.UrlFilter में, रेगुलर एक्सप्रेशन के बजाय सबस्ट्रिंग मैचिंग का इस्तेमाल करें. सबस्ट्रिंग के आधार पर मैचिंग बहुत तेज़ी से होती है.
const match = new browser.declarativeWebRequest.RequestMatcher({ url: {urlMatches: "example.com/[^?]*foo" } });
const match = new browser.declarativeWebRequest.RequestMatcher({ url: {hostSuffix: "example.com", pathContains: "foo"} });
अगर कई नियमों में एक जैसी कार्रवाइयां शामिल हैं, तो उन नियमों को एक में मर्ज कर दें. किसी एक शर्त के पूरा होते ही, नियम से जुड़ी कार्रवाइयां ट्रिगर हो जाती हैं. इससे डुप्लीकेट ऐक्शन सेट के लिए, मैचिंग की प्रोसेस तेज़ हो जाती है और मेमोरी का इस्तेमाल कम हो जाता है.
const condition1 = new browser.declarativeWebRequest.RequestMatcher({ url: { hostSuffix: 'example.com' } }); const condition2 = new browser.declarativeWebRequest.RequestMatcher({ url: { hostSuffix: 'foobar.com' } }); const rule1 = { conditions: [condition1], actions: [new browser.declarativeWebRequest.CancelRequest()] }; const rule2 = { conditions: [condition2], actions: [new browser.declarativeWebRequest.CancelRequest()] }; browser.declarativeWebRequest.onRequest.addRules([rule1, rule2]);
const condition1 = new browser.declarativeWebRequest.RequestMatcher({ url: { hostSuffix: 'example.com' } }); const condition2 = new browser.declarativeWebRequest.RequestMatcher({ url: { hostSuffix: 'foobar.com' } }); const rule = { conditions: [condition1, condition2], actions: [new browser.declarativeWebRequest.CancelRequest()] }; browser.declarativeWebRequest.onRequest.addRules([rule]);
फ़िल्टर किए गए इवेंट
फ़िल्टर किए गए इवेंट, एक ऐसा तरीका है जिसकी मदद से लिसनर, इवेंट का ऐसा सबसेट तय कर सकते हैं जिसमें उनकी दिलचस्पी है. फ़िल्टर का इस्तेमाल करने वाले लिसनर को उन इवेंट के लिए ट्रिगर नहीं किया जाएगा जो फ़िल्टर की शर्तों को पूरा नहीं करते. इससे लिसनिंग कोड ज़्यादा जानकारी देने वाला और असरदार बन जाता है. सर्विस वर्कर को उन इवेंट को हैंडल करने के लिए चालू करने की ज़रूरत नहीं होती है जिनसे उसे कोई मतलब नहीं होता.
फ़िल्टर किए गए इवेंट, मैन्युअल फ़िल्टरिंग कोड से ट्रांज़िशन करने के लिए होते हैं.
browser.webNavigation.onCommitted.addListener((event) => { if (hasHostSuffix(event.url, 'google.com') || hasHostSuffix(event.url, 'google.com.au')) { // ... } });
browser.webNavigation.onCommitted.addListener((event) => { // ... }, {url: [{hostSuffix: 'google.com'}, {hostSuffix: 'google.com.au'}]});
इवेंट में ऐसे फ़िल्टर इस्तेमाल किए जा सकते हैं जो उस इवेंट के लिए काम के हों. किसी इवेंट के साथ काम करने वाले फ़िल्टर की सूची, उस इवेंट के दस्तावेज़ में "फ़िल्टर" सेक्शन में दी जाएगी.
मिलते-जुलते यूआरएल (ऊपर दिए गए उदाहरण की तरह) के लिए, इवेंट फ़िल्टर में यूआरएल मैच करने की वही सुविधाएं होती हैं जो events.UrlFilter के साथ इस्तेमाल की जा सकती हैं. हालांकि, इसमें स्कीम और पोर्ट मैच करने की सुविधा शामिल नहीं होती.
टाइप
Event
यह एक ऐसा ऑब्जेक्ट है जिसकी मदद से, Chrome इवेंट के लिए लिसनर जोड़े और हटाए जा सकते हैं.
प्रॉपर्टी
-
addListener
अमान्य
यह कुकी, किसी इवेंट के लिए इवेंट लिसनर कॉलबैक को रजिस्टर करती है.
addListenerफ़ंक्शन इस तरह दिखता है:(callback: H) => {...}
-
कॉलबैक
H
किसी इवेंट के होने पर इसे कॉल किया जाता है. इस फ़ंक्शन के पैरामीटर, इवेंट के टाइप पर निर्भर करते हैं.
-
-
addRules
अमान्य
यह कुकी, इवेंट को मैनेज करने के लिए नियमों को रजिस्टर करती है.
addRulesफ़ंक्शन इस तरह दिखता है:(rules: Rule<anyany>[], callback?: function) => {...}
-
getRules
अमान्य
यह फ़िलहाल रजिस्टर किए गए नियमों की जानकारी देता है.
getRulesफ़ंक्शन इस तरह दिखता है:(ruleIdentifiers?: string[], callback: function) => {...}
-
ruleIdentifiers
string[] ज़रूरी नहीं है
अगर कोई कलेक्शन पास किया जाता है, तो सिर्फ़ उन नियमों को दिखाया जाता है जिनके आइडेंटिफ़ायर इस कलेक्शन में शामिल हैं.
-
कॉलबैक
फ़ंक्शन
callbackपैरामीटर ऐसा दिखता है:(rules: Rule<anyany>[]) => void
-
नियम
Rule<anyany>[]
रजिस्टर किए गए नियम, वैकल्पिक पैरामीटर में वैल्यू भरी जाती हैं.
-
-
-
hasListener
अमान्य
hasListenerफ़ंक्शन इस तरह दिखता है:(callback: H) => {...}
-
कॉलबैक
H
लिसनर, जिसके रजिस्ट्रेशन स्टेटस की जांच की जाएगी.
-
returns
बूलियन
अगर इवेंट के लिए callback रजिस्टर किया गया है, तो वैल्यू 'सही है' पर सेट होती है.
-
-
hasListeners
अमान्य
hasListenersफ़ंक्शन इस तरह दिखता है:() => {...}-
returns
बूलियन
अगर इवेंट के लिए कोई इवेंट लिसनर रजिस्टर किया गया है, तो वैल्यू सही होती है.
-
-
removeListener
अमान्य
यह फ़ंक्शन, किसी इवेंट से इवेंट लिसनर callback को हटाता है.
removeListenerफ़ंक्शन इस तरह दिखता है:(callback: H) => {...}
-
कॉलबैक
H
वह लिसनर जिसका रजिस्ट्रेशन रद्द किया जाना है.
-
-
removeRules
अमान्य
इससे, फ़िलहाल रजिस्टर किए गए नियमों को अनरजिस्टर किया जाता है.
removeRulesफ़ंक्शन इस तरह दिखता है:(ruleIdentifiers?: string[], callback?: function) => {...}
-
ruleIdentifiers
string[] ज़रूरी नहीं है
अगर कोई ऐरे पास की जाती है, तो सिर्फ़ उन नियमों को अनरजिस्टर किया जाता है जिनके आइडेंटिफ़ायर इस ऐरे में शामिल हैं.
-
कॉलबैक
फ़ंक्शन ज़रूरी नहीं
callbackपैरामीटर ऐसा दिखता है:() => void
-
Rule
इवेंट हैंडल करने के लिए, डिक्लेरेटिव नियम की जानकारी.
प्रॉपर्टी
-
कार्रवाइयां
कोई भी[]
अगर कोई शर्त पूरी होती है, तो ट्रिगर होने वाली कार्रवाइयों की सूची.
-
शर्तें
कोई भी[]
उन शर्तों की सूची जिनसे कार्रवाइयां ट्रिगर हो सकती हैं.
-
आईडी
string ज़रूरी नहीं है
यह एक वैकल्पिक आइडेंटिफ़ायर है. इसकी मदद से इस नियम को रेफ़र किया जा सकता है.
-
प्राथमिकता
number optional
इस नियम की प्राथमिकता (वैकल्पिक). डिफ़ॉल्ट रूप से, यह वैल्यू 100 पर सेट होती है.
-
टैग
string[] ज़रूरी नहीं है
टैग का इस्तेमाल, नियमों को एनोटेट करने और नियमों के सेट पर कार्रवाइयां करने के लिए किया जा सकता है.
UrlFilter
यह कुकी, अलग-अलग शर्तों के हिसाब से यूआरएल फ़िल्टर करती है. इवेंट फ़िल्टर करना लेख पढ़ें. सभी मानदंड केस-सेंसिटिव होते हैं.
प्रॉपर्टी
-
cidrBlocks
string[] ज़रूरी नहीं है
Chrome 123+अगर यूआरएल का होस्ट हिस्सा कोई आईपी पता है और वह ऐरे में दिए गए किसी भी सीआईडीआर ब्लॉक में शामिल है, तो यह शर्त पूरी होती है.
-
hostContains
string ज़रूरी नहीं है
अगर यूआरएल के होस्टनेम में तय की गई स्ट्रिंग मौजूद है, तो यह शर्त पूरी होती है. यह जांचने के लिए कि क्या किसी होस्ट नेम कॉम्पोनेंट में 'foo' प्रीफ़िक्स है, hostContains: '.foo' का इस्तेमाल करें. यह 'www.foobar.com' और 'foo.com' से मेल खाता है, क्योंकि होस्ट नेम की शुरुआत में एक इंप्लिसिट डॉट जोड़ा जाता है. इसी तरह, hostContains का इस्तेमाल कॉम्पोनेंट के सफ़िक्स ('foo.') से मिलान करने और कॉम्पोनेंट ('.foo.') से सटीक मिलान करने के लिए किया जा सकता है. आखिरी कॉम्पोनेंट के लिए, सफ़िक्स और सटीक मैचिंग अलग-अलग तरीके से की जानी चाहिए. इसके लिए, hostSuffix का इस्तेमाल करें. ऐसा इसलिए, क्योंकि होस्ट नेम के आखिर में कोई इंप्लिसिट डॉट नहीं जोड़ा जाता है.
-
hostEquals
string ज़रूरी नहीं है
अगर यूआरएल का होस्ट नेम, तय की गई स्ट्रिंग के बराबर है, तो यह शर्त पूरी होती है.
-
hostPrefix
string ज़रूरी नहीं है
अगर यूआरएल का होस्ट नेम, तय की गई स्ट्रिंग से शुरू होता है, तो यह शर्त पूरी होती है.
-
hostSuffix
string ज़रूरी नहीं है
अगर यूआरएल का होस्टनेम, तय की गई स्ट्रिंग पर खत्म होता है, तो यह शर्त पूरी होती है.
-
originAndPathMatches
string ज़रूरी नहीं है
अगर क्वेरी सेगमेंट और फ़्रैगमेंट आइडेंटिफ़ायर के बिना यूआरएल, तय किए गए रेगुलर एक्सप्रेशन से मेल खाता है, तो यह शर्त पूरी होती है. अगर पोर्ट नंबर, डिफ़ॉल्ट पोर्ट नंबर से मेल खाते हैं, तो उन्हें यूआरएल से हटा दिया जाता है. रेगुलर एक्सप्रेशन, RE2 सिंटैक्स का इस्तेमाल करते हैं.
-
pathContains
string ज़रूरी नहीं है
अगर यूआरएल के पाथ सेगमेंट में तय की गई स्ट्रिंग मौजूद है, तो यह शर्त पूरी होती है.
-
pathEquals
string ज़रूरी नहीं है
अगर यूआरएल का पाथ सेगमेंट, तय की गई स्ट्रिंग के बराबर है, तो यह शर्त पूरी होती है.
-
pathPrefix
string ज़रूरी नहीं है
अगर यूआरएल का पाथ सेगमेंट, तय की गई स्ट्रिंग से शुरू होता है, तो यह शर्त पूरी होती है.
-
pathSuffix
string ज़रूरी नहीं है
अगर यूआरएल का पाथ सेगमेंट, तय की गई स्ट्रिंग पर खत्म होता है, तो यह शर्त पूरी होती है.
-
ports
(number | number[])[] optional
अगर यूआरएल का पोर्ट, बताई गई किसी भी पोर्ट की सूची में शामिल है, तो यह शर्त पूरी होती है. उदाहरण के लिए,
[80, 443, [1000, 1200]]पोर्ट 80, 443 और 1000 से 1200 तक की रेंज के सभी अनुरोधों से मैच करता है. -
queryContains
string ज़रूरी नहीं है
अगर यूआरएल के क्वेरी सेगमेंट में बताई गई स्ट्रिंग मौजूद है, तो यह शर्त पूरी होती है.
-
queryEquals
string ज़रूरी नहीं है
अगर यूआरएल का क्वेरी सेगमेंट, तय की गई स्ट्रिंग के बराबर है, तो यह शर्त पूरी होती है.
-
queryPrefix
string ज़रूरी नहीं है
अगर यूआरएल का क्वेरी सेगमेंट, तय की गई स्ट्रिंग से शुरू होता है, तो यह शर्त पूरी होती है.
-
querySuffix
string ज़रूरी नहीं है
अगर यूआरएल का क्वेरी सेगमेंट, तय की गई स्ट्रिंग पर खत्म होता है, तो यह शर्त पूरी होती है.
-
स्कीम
string[] ज़रूरी नहीं है
अगर यूआरएल की स्कीम, ऐरे में दी गई किसी भी स्कीम के बराबर है, तो यह शर्त पूरी होती है.
-
urlContains
string ज़रूरी नहीं है
अगर यूआरएल (बिना फ़्रैगमेंट आइडेंटिफ़ायर के) में कोई स्ट्रिंग मौजूद है, तो यह शर्त पूरी होती है. अगर पोर्ट नंबर, डिफ़ॉल्ट पोर्ट नंबर से मेल खाते हैं, तो उन्हें यूआरएल से हटा दिया जाता है.
-
urlEquals
string ज़रूरी नहीं है
अगर यूआरएल (बिना फ़्रैगमेंट आइडेंटिफ़ायर के) तय की गई स्ट्रिंग के बराबर है, तो यह शर्त पूरी होती है. अगर पोर्ट नंबर, डिफ़ॉल्ट पोर्ट नंबर से मेल खाते हैं, तो उन्हें यूआरएल से हटा दिया जाता है.
-
urlMatches
string ज़रूरी नहीं है
अगर यूआरएल (बिना फ़्रैगमेंट आइडेंटिफ़ायर के) तय किए गए रेगुलर एक्सप्रेशन से मेल खाता है, तो यह शर्त पूरी होती है. अगर पोर्ट नंबर, डिफ़ॉल्ट पोर्ट नंबर से मेल खाते हैं, तो उन्हें यूआरएल से हटा दिया जाता है. रेगुलर एक्सप्रेशन, RE2 सिंटैक्स का इस्तेमाल करते हैं.
-
urlPrefix
string ज़रूरी नहीं है
अगर यूआरएल (बिना फ़्रैगमेंट आइडेंटिफ़ायर के) किसी तय स्ट्रिंग से शुरू होता है, तो यह फ़ंक्शन काम करता है. अगर पोर्ट नंबर, डिफ़ॉल्ट पोर्ट नंबर से मेल खाते हैं, तो उन्हें यूआरएल से हटा दिया जाता है.
-
urlSuffix
string ज़रूरी नहीं है
अगर यूआरएल (फ़्रैगमेंट आइडेंटिफ़ायर के बिना) किसी तय की गई स्ट्रिंग पर खत्म होता है, तो यह शर्त पूरी होती है. अगर पोर्ट नंबर, डिफ़ॉल्ट पोर्ट नंबर से मेल खाते हैं, तो उन्हें यूआरएल से हटा दिया जाता है.