chrome.declarativeContent

ब्यौरा

किसी पेज के कॉन्टेंट के आधार पर कार्रवाइयां करने के लिए, 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 में "बुकमार्क" की अनुमति का एलान करना ज़रूरी है.

टाइप

टाइप

ImageData

PageStateMatcher

यह कई शर्तों के आधार पर, किसी वेब पेज की स्थिति से मेल खाता है.

प्रॉपर्टी

  • constructor

    अमान्य

    constructor फ़ंक्शन इस तरह दिखता है:

    (arg: PageStateMatcher) => {...}

  • css

    string[] ज़रूरी नहीं

    मैच तब होता है, जब ऐरे में मौजूद सभी सीएसएस सिलेक्टर, पेज के मुख्य फ़्रेम के ओरिजिन वाले फ़्रेम में दिखने वाले एलिमेंट से मैच करते हों. मैच करने की प्रोसेस को तेज़ करने के लिए, इस कलेक्शन में मौजूद सभी सिलेक्टर कंपाउंड सिलेक्टर होने चाहिए. ध्यान दें: सैकड़ों सीएसएस सिलेक्टर या हर पेज पर सैकड़ों बार मैच करने वाले सीएसएस सिलेक्टर की सूची बनाने से, वेबसाइटें धीमी हो सकती हैं.

  • isBookmarked

    बूलियन ज़रूरी नहीं

    Chrome 45 और उसके बाद के वर्शन

    पेज की बुकमार्क की गई स्थिति, बताई गई वैल्यू से मेल खाने पर मैच होता है. इसके लिए, बुकमार्क की अनुमति की ज़रूरत होती है.

  • pageUrl

    UrlFilter ज़रूरी नहीं है

    पेज के टॉप-लेवल यूआरएल के लिए, UrlFilter की शर्तें पूरी होने पर मैच करता है.

RequestContentScript

कॉन्टेंट स्क्रिप्ट इंजेक्ट करने वाली, एलान वाली इवेंट कार्रवाई.

चेतावनी: यह कार्रवाई अभी एक्सपेरिमेंट के तौर पर उपलब्ध है. यह Chrome के स्टेबल वर्शन पर काम नहीं करती.

प्रॉपर्टी

  • constructor

    अमान्य

    constructor फ़ंक्शन इस तरह दिखता है:

    (arg: RequestContentScript) => {...}

  • 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) => {...}

  • imageData

    ImageData | ऑब्जेक्ट ज़रूरी नहीं

    सेट किए जाने वाले आइकॉन को दिखाने वाला ImageData ऑब्जेक्ट या डिक्शनरी {size -> ImageData}. अगर आइकॉन को डिक्शनरी के तौर पर तय किया गया है, तो स्क्रीन की पिक्सल डेंसिटी के हिसाब से इमेज चुनी जाती है. अगर एक स्क्रीन स्पेस यूनिट में फ़िट होने वाली इमेज के पिक्सल की संख्या scale है, तो scale * n साइज़ वाली इमेज चुनी जाती है. यहां n, यूज़र इंटरफ़ेस (यूआई) में आइकॉन का साइज़ है. कम से कम एक इमेज की जानकारी देना ज़रूरी है. ध्यान दें कि details.imageData = foo, details.imageData = {'16': foo} के बराबर है.

ShowAction

Chrome 97 और उसके बाद के वर्शन

यह एक ऐसी इवेंट कार्रवाई है जो एक्सटेंशन के टूलबार action को चालू स्थिति पर सेट करती है. ऐसा तब होता है, जब उससे जुड़ी शर्तें पूरी हो जाती हैं. इस कार्रवाई का इस्तेमाल, होस्ट की अनुमतियों के बिना किया जा सकता है. अगर एक्सटेंशन के पास activeTab की अनुमति है, तो पेज ऐक्शन पर क्लिक करने से, ऐक्टिव टैब का ऐक्सेस मिल जाता है.

जिन पेजों पर शर्तें पूरी नहीं होतीं उन पर, एक्सटेंशन के टूलबार ऐक्शन का रंग स्लेटी हो जाएगा. साथ ही, उस पर क्लिक करने से ऐक्शन ट्रिगर होने के बजाय, कॉन्टेक्स्ट मेन्यू खुलेगा.

प्रॉपर्टी

  • constructor

    अमान्य

    constructor फ़ंक्शन इस तरह दिखता है:

    (arg: ShowAction) => {...}

ShowPageAction

Chrome 97 के बाद से काम नहीं करता

कृपया declarativeContent.ShowAction का इस्तेमाल करें.

यह एक ऐसी इवेंट कार्रवाई है जो एक्सटेंशन के पेज ऐक्शन को चालू की गई स्थिति पर सेट करती है. ऐसा तब होता है, जब उससे जुड़ी शर्तें पूरी हो जाती हैं. इस कार्रवाई का इस्तेमाल, होस्ट की अनुमतियों के बिना किया जा सकता है. हालांकि, एक्सटेंशन में पेज ऐक्शन होना चाहिए. अगर एक्सटेंशन के पास activeTab की अनुमति है, तो पेज ऐक्शन पर क्लिक करने से, ऐक्टिव टैब का ऐक्सेस मिल जाता है.

जिन पेजों पर शर्तें पूरी नहीं होतीं उन पर, एक्सटेंशन के टूलबार ऐक्शन का रंग स्लेटी हो जाएगा. साथ ही, उस पर क्लिक करने से ऐक्शन ट्रिगर होने के बजाय, कॉन्टेक्स्ट मेन्यू खुलेगा.

प्रॉपर्टी

इवेंट

onPageChanged

addRules, removeRules, और getRules से बना Declarative Event API उपलब्ध कराता है.

शर्तें

कार्रवाइयां