ब्यौरा
किसी पेज के कॉन्टेंट के आधार पर कार्रवाइयां करने के लिए, chrome.declarativeContent
एपीआई का इस्तेमाल करें. इसके लिए, आपको पेज के कॉन्टेंट को पढ़ने की अनुमति की ज़रूरत नहीं है.
अनुमतियां
declarativeContent
कॉन्सेप्ट और इस्तेमाल
Declarative Content API की मदद से, किसी वेब पेज के यूआरएल या पेज पर मौजूद किसी एलिमेंट से मैच करने वाले सीएसएस सिलेक्टर के आधार पर, अपने एक्सटेंशन की कार्रवाई को चालू किया जा सकता है. इसके लिए, होस्ट की अनुमतियां जोड़ने या कॉन्टेंट स्क्रिप्ट इंजेक्ट करने की ज़रूरत नहीं होती.
उपयोगकर्ता के एक्सटेंशन की कार्रवाई पर क्लिक करने के बाद, किसी पेज से इंटरैक्ट करने के लिए activeTab अनुमति का इस्तेमाल करें.
नियम
नियमों में शर्तें और कार्रवाइयां शामिल होती हैं. अगर कोई भी शर्त पूरी होती है, तो सभी कार्रवाइयां पूरी की जाती हैं. कार्रवाइयां setIcon()
और showAction()
हैं.
PageStateMatcher
, वेब पेजों से सिर्फ़ तब मैच होता है, जब सूची में दी गई सभी शर्तें पूरी होती हैं. यह पेज के यूआरएल, सीएसएस कंपाउंड सिलेक्टर या किसी पेज की बुकमार्क की गई स्थिति से मेल खा सकता है. यहां दिया गया नियम, पासवर्ड फ़ील्ड मौजूद होने पर, Google पेजों पर एक्सटेंशन की कार्रवाई को चालू करता है:
let rule1 = {
conditions: [
new chrome.declarativeContent.PageStateMatcher({
pageUrl: { hostSuffix: '.google.com', schemes: ['https'] },
css: ["input[type='password']"]
})
],
actions: [ new chrome.declarativeContent.ShowAction() ]
};
वीडियो वाली Google साइटों के लिए भी एक्सटेंशन की कार्रवाई चालू करने के लिए, दूसरी शर्त जोड़ी जा सकती है. ऐसा इसलिए, क्योंकि बताई गई सभी कार्रवाइयों को ट्रिगर करने के लिए, हर शर्त काफ़ी है:
let rule2 = {
conditions: [
new chrome.declarativeContent.PageStateMatcher({
pageUrl: { hostSuffix: '.google.com', schemes: ['https'] },
css: ["input[type='password']"]
}),
new chrome.declarativeContent.PageStateMatcher({
css: ["video"]
})
],
actions: [ new chrome.declarativeContent.ShowAction() ]
};
onPageChanged
इवेंट यह जांच करता है कि किसी नियम में कम से कम एक शर्त पूरी हुई है या नहीं. साथ ही, कार्रवाइयां करता है. नियम, ब्राउज़िंग सेशन के दौरान बने रहते हैं. इसलिए, एक्सटेंशन इंस्टॉल करने के दौरान, पहले removeRules
का इस्तेमाल करके, पहले से इंस्टॉल किए गए नियमों को मिटाएं. इसके बाद, नए नियमों को रजिस्टर करने के लिए addRules
का इस्तेमाल करें.
chrome.runtime.onInstalled.addListener(function(details) {
chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
chrome.declarativeContent.onPageChanged.addRules([rule2]);
});
});
activeTab अनुमति की मदद से, आपका एक्सटेंशन अनुमति से जुड़ी कोई चेतावनी नहीं दिखाएगा. साथ ही, जब उपयोगकर्ता एक्सटेंशन ऐक्शन पर क्लिक करेगा, तो यह सिर्फ़ काम के पेजों पर चलेगा.
पेज के यूआरएल से मैच करना
यूआरएल की शर्तें पूरी होने पर, PageStateMatcher.pageurl
मैच होता है. सबसे सामान्य शर्तें, होस्ट, पाथ या यूआरएल को जोड़ने के बाद, इसमें शामिल है, बराबर है, प्रीफ़िक्स या सफ़िक्स है. यहां दी गई टेबल में कुछ उदाहरण दिए गए हैं:
नियम और शर्तें | मैच |
---|---|
{ hostSuffix: 'google.com' } |
Google के सभी यूआरएल |
{ pathPrefix: '/docs/extensions' } |
एक्सटेंशन के दस्तावेज़ों के यूआरएल |
{ urlContains: 'developer.chrome.com' } |
Chrome डेवलपर के सभी दस्तावेज़ों के यूआरएल |
सभी शर्तें केस-सेंसिटिव होती हैं. शर्तों की पूरी सूची के लिए, UrlFilter देखें.
सीएसएस मैचिंग
PageStateMatcher.css
शर्तें कंपाउंड सिलेक्टर होनी चाहिए. इसका मतलब है कि सिलेक्टर में व्हाइटस्पेस या ">
" जैसे कम्बिनेटर शामिल नहीं किए जा सकते. इससे Chrome, सिलेक्टर को ज़्यादा असरदार तरीके से मैच कर पाता है.
कंपाउंड सिलेक्टर (ठीक है) | कॉम्प्लेक्स सिलेक्टर (ठीक नहीं है) |
---|---|
a |
div p |
iframe.special[src^='http'] |
p>span.highlight |
ns|* |
p + ol |
#abcd:checked |
p::first-line |
सीएसएस की शर्तें सिर्फ़ दिखाए गए एलिमेंट से मैच करती हैं: अगर आपके सिलेक्टर से मैच करने वाला कोई एलिमेंट display:none
है या उसका कोई पैरंट एलिमेंट display:none
है, तो शर्त मैच नहीं होती. visibility:hidden
से स्टाइल किए गए, स्क्रीन पर नहीं दिखने वाले या अन्य एलिमेंट से छिपे हुए एलिमेंट के लिए भी, शर्त मैच हो सकती है.
बुकमार्क की गई स्थिति से मैच करना
PageStateMatcher.isBookmarked
शर्त की मदद से, उपयोगकर्ता की प्रोफ़ाइल में मौजूदा यूआरएल की, ब्राउज़र में बुकमार्क की गई स्थिति का मिलान किया जा सकता है. इस शर्त का इस्तेमाल करने के लिए, एक्सटेंशन के manifest में "बुकमार्क" की अनुमति का एलान करना ज़रूरी है.
टाइप
ImageDataType
https://developer.mozilla.org/en-US/docs/Web/API/ImageData देखें.
टाइप
ImageData
PageStateMatcher
यह कई शर्तों के आधार पर, किसी वेब पेज की स्थिति से मेल खाता है.
प्रॉपर्टी
-
constructor
अमान्य
constructor
फ़ंक्शन इस तरह दिखता है:(arg: PageStateMatcher) => {...}
-
arg
-
returns
-
-
css
string[] ज़रूरी नहीं
मैच तब होता है, जब ऐरे में मौजूद सभी सीएसएस सिलेक्टर, पेज के मुख्य फ़्रेम के ओरिजिन वाले फ़्रेम में दिखने वाले एलिमेंट से मैच करते हों. मैच करने की प्रोसेस को तेज़ करने के लिए, इस कलेक्शन में मौजूद सभी सिलेक्टर कंपाउंड सिलेक्टर होने चाहिए. ध्यान दें: सैकड़ों सीएसएस सिलेक्टर या हर पेज पर सैकड़ों बार मैच करने वाले सीएसएस सिलेक्टर की सूची बनाने से, वेबसाइटें धीमी हो सकती हैं.
-
isBookmarked
बूलियन ज़रूरी नहीं
Chrome 45 और उसके बाद के वर्शनपेज की बुकमार्क की गई स्थिति, बताई गई वैल्यू से मेल खाने पर मैच होता है. इसके लिए, बुकमार्क की अनुमति की ज़रूरत होती है.
-
pageUrl
UrlFilter ज़रूरी नहीं है
पेज के टॉप-लेवल यूआरएल के लिए,
UrlFilter
की शर्तें पूरी होने पर मैच करता है.
RequestContentScript
कॉन्टेंट स्क्रिप्ट इंजेक्ट करने वाली, एलान वाली इवेंट कार्रवाई.
चेतावनी: यह कार्रवाई अभी एक्सपेरिमेंट के तौर पर उपलब्ध है. यह Chrome के स्टेबल वर्शन पर काम नहीं करती.
प्रॉपर्टी
-
constructor
अमान्य
constructor
फ़ंक्शन इस तरह दिखता है:(arg: RequestContentScript) => {...}
-
returns
-
-
allFrames
बूलियन ज़रूरी नहीं
कॉन्टेंट स्क्रिप्ट, मैच करने वाले पेज के सभी फ़्रेम में चलती है या सिर्फ़ सबसे ऊपर वाले फ़्रेम में. डिफ़ॉल्ट रूप से
false
होता है. -
css
string[] ज़रूरी नहीं
कॉन्टेंट स्क्रिप्ट के हिस्से के तौर पर इंजेक्ट की जाने वाली CSS फ़ाइलों के नाम.
-
js
string[] ज़रूरी नहीं
कॉन्टेंट स्क्रिप्ट के हिस्से के तौर पर इंजेक्ट की जाने वाली JavaScript फ़ाइलों के नाम.
-
matchAboutBlank
बूलियन ज़रूरी नहीं
about:blank
औरabout:srcdoc
पर कॉन्टेंट स्क्रिप्ट डालनी है या नहीं. डिफ़ॉल्ट रूप सेfalse
होता है.
SetIcon
एलान वाली इवेंट कार्रवाई, जो एक्सटेंशन के पेज ऐक्शन या ब्राउज़र ऐक्शन के लिए, n-dip स्क्वेयर आइकॉन सेट करती है. ऐसा तब होता है, जब उससे जुड़ी शर्तें पूरी होती हैं. इस कार्रवाई का इस्तेमाल, होस्ट की अनुमतियों के बिना किया जा सकता है. हालांकि, एक्सटेंशन में कोई पेज या ब्राउज़र ऐक्शन होना चाहिए.
imageData
या path
में से किसी एक की जानकारी देना ज़रूरी है. दोनों डिक्शनरी, इमेज के रेप्रज़ेंटेशन के लिए कई पिक्सल को मैप करती हैं. imageData
में इमेज का रेप्रज़ेंटेशन, ImageData ऑब्जेक्ट होता है. उदाहरण के लिए, canvas
एलिमेंट से. वहीं, path
में इमेज का रेप्रज़ेंटेशन, एक्सटेंशन के मेनिफ़ेस्ट से जुड़ी इमेज फ़ाइल का पाथ होता है. अगर scale
स्क्रीन पिक्सल, डिवाइस-डिपेंडेंट पिक्सल में फ़िट होते हैं, तो scale * n
आइकॉन का इस्तेमाल किया जाता है. अगर वह स्केल मौजूद नहीं है, तो किसी दूसरी इमेज का साइज़ बदलकर ज़रूरी साइज़ पर सेट कर दिया जाता है.
प्रॉपर्टी
-
constructor
अमान्य
constructor
फ़ंक्शन इस तरह दिखता है:(arg: SetIcon) => {...}
-
arg
-
returns
-
-
imageData
ImageData | ऑब्जेक्ट ज़रूरी नहीं
सेट किए जाने वाले आइकॉन को दिखाने वाला
ImageData
ऑब्जेक्ट या डिक्शनरी {size -> ImageData}. अगर आइकॉन को डिक्शनरी के तौर पर तय किया गया है, तो स्क्रीन की पिक्सल डेंसिटी के हिसाब से इमेज चुनी जाती है. अगर एक स्क्रीन स्पेस यूनिट में फ़िट होने वाली इमेज के पिक्सल की संख्याscale
है, तोscale * n
साइज़ वाली इमेज चुनी जाती है. यहां n, यूज़र इंटरफ़ेस (यूआई) में आइकॉन का साइज़ है. कम से कम एक इमेज की जानकारी देना ज़रूरी है. ध्यान दें किdetails.imageData = foo
,details.imageData = {'16': foo}
के बराबर है.
ShowAction
यह एक ऐसी इवेंट कार्रवाई है जो एक्सटेंशन के टूलबार action को चालू स्थिति पर सेट करती है. ऐसा तब होता है, जब उससे जुड़ी शर्तें पूरी हो जाती हैं. इस कार्रवाई का इस्तेमाल, होस्ट की अनुमतियों के बिना किया जा सकता है. अगर एक्सटेंशन के पास activeTab की अनुमति है, तो पेज ऐक्शन पर क्लिक करने से, ऐक्टिव टैब का ऐक्सेस मिल जाता है.
जिन पेजों पर शर्तें पूरी नहीं होतीं उन पर, एक्सटेंशन के टूलबार ऐक्शन का रंग स्लेटी हो जाएगा. साथ ही, उस पर क्लिक करने से ऐक्शन ट्रिगर होने के बजाय, कॉन्टेक्स्ट मेन्यू खुलेगा.
प्रॉपर्टी
-
constructor
अमान्य
constructor
फ़ंक्शन इस तरह दिखता है:(arg: ShowAction) => {...}
-
arg
-
returns
-
ShowPageAction
कृपया declarativeContent.ShowAction
का इस्तेमाल करें.
यह एक ऐसी इवेंट कार्रवाई है जो एक्सटेंशन के पेज ऐक्शन को चालू की गई स्थिति पर सेट करती है. ऐसा तब होता है, जब उससे जुड़ी शर्तें पूरी हो जाती हैं. इस कार्रवाई का इस्तेमाल, होस्ट की अनुमतियों के बिना किया जा सकता है. हालांकि, एक्सटेंशन में पेज ऐक्शन होना चाहिए. अगर एक्सटेंशन के पास activeTab की अनुमति है, तो पेज ऐक्शन पर क्लिक करने से, ऐक्टिव टैब का ऐक्सेस मिल जाता है.
जिन पेजों पर शर्तें पूरी नहीं होतीं उन पर, एक्सटेंशन के टूलबार ऐक्शन का रंग स्लेटी हो जाएगा. साथ ही, उस पर क्लिक करने से ऐक्शन ट्रिगर होने के बजाय, कॉन्टेक्स्ट मेन्यू खुलेगा.
प्रॉपर्टी
-
constructor
अमान्य
constructor
फ़ंक्शन इस तरह दिखता है:(arg: ShowPageAction) => {...}
-
arg
-
returns
-
इवेंट
onPageChanged
addRules
, removeRules
, और getRules
से बना Declarative Event API उपलब्ध कराता है.