मेनिफ़ेस्ट - कॉन्टेंट स्क्रिप्ट

"content_scripts" कुंजी स्टैटिक रूप से लोड की गई ऐसी JavaScript या सीएसएस फ़ाइल के बारे में बताती है जिसे हर बार ऐसा पेज खोलने पर इस्तेमाल किया जाता है जो किसी तय यूआरएल पैटर्न से मेल खाता हो. एक्सटेंशन, प्रोग्राम के हिसाब से भी कॉन्टेंट की स्क्रिप्ट इंजेक्ट कर सकते हैं. ज़्यादा जानकारी के लिए, स्क्रिप्ट इंजेक्ट करना लेख पढ़ें.

मेनिफ़ेस्ट

ये कुंजियां, "content_scripts" के साथ इस्तेमाल की जा सकती हैं. सिर्फ़ "matches" कुंजी और "js" या "css" की ज़रूरत है.

manifest.json

{
 "name": "My extension",
 ...
 "content_scripts": [
   {
     "matches": ["https://*.example.com/*"],
     "css": ["my-styles.css"],
     "js": ["content-script.js"],
     "exclude_matches": ["*://*/*foo*"],
     "include_globs": ["*example.com/???s/*"],
     "exclude_globs": ["*bar*"],     
     "all_frames": false,
     "match_origin_as_fallback": false,
     "match_about_blank": false,
     "run_at": "document_idle",
     "world": "ISOLATED",
   }
 ],
 ...
}

Files

हर फ़ाइल में, एक्सटेंशन की रूट डायरेक्ट्री में मौजूद संसाधन का रिलेटिव पाथ शामिल होना चाहिए. लीडिंग स्लैश (/) को अपने-आप काट दिया जाता है. "run_at" कुंजी से पता चलता है कि हर फ़ाइल को कब इंजेक्ट किया जाएगा.

"css" - कलेक्शन
ज़रूरी नहीं है. सीएसएस फ़ाइल पाथ का कलेक्शन, जिसे इस अरे के क्रम में इंजेक्ट किया जाता है. साथ ही, डीओएम बनाने या पेज रेंडरिंग से पहले भी इसे इंजेक्ट किया जाता है.
"js" - कलेक्शन,
ज़रूरी नहीं है. JavaScript फ़ाइल पाथ का कलेक्शन. सीएसएस फ़ाइलों को इंजेक्ट करने के बाद, उन्हें उसी क्रम में इंजेक्ट किया जाता है जिस क्रम में वे इस कलेक्शन में दिखते हैं. कलेक्शन में मौजूद हर स्ट्रिंग, एक्सटेंशन की रूट डायरेक्ट्री में मौजूद संसाधन का रिलेटिव पाथ होना चाहिए. शुरुआत के स्लैश ('/') को अपने-आप छोटा कर दिया जाता है.

यूआरएल का मिलान करें

सिर्फ़ "matches" प्रॉपर्टी ज़रूरी है. इसके बाद, "exclude_matches", "include_globs", और "exclude_globs" का इस्तेमाल करके, यह तय किया जा सकता है कि किन यूआरएल में कोड इंजेक्ट करना है. "matches" कुंजी से चेतावनी मिलेगी.

"matches" - कलेक्शन
ज़रूरी है. इससे पता चलता है कि किन यूआरएल पैटर्न में कॉन्टेंट स्क्रिप्ट इंजेक्ट करनी है. सिंटैक्स के लिए, मैच पैटर्न देखें.
"exclude_matches" - कलेक्शन
ज़रूरी नहीं है. इसमें कॉन्टेंट स्क्रिप्ट डालने के लिए, यूआरएल पैटर्न शामिल नहीं किए जाते. सिंटैक्स के लिए, मैच पैटर्न देखें.
"include_globs" - कलेक्शन
ज़रूरी नहीं है. सिर्फ़ उन यूआरएल को शामिल करने के लिए लागू किया जाता है जो इस ग्लोब से मेल खाते हैं. इसका मकसद, @include Greasemonkey कीवर्ड को एम्युलेट करना है.
"exclude_globs" - कलेक्शन
ज़रूरी नहीं है. इस ग्लोब से मेल खाने वाले यूआरएल को बाहर रखने के लिए, मैच होने के बाद लागू किया जाता है. इसका मकसद, @excluded Gressmonkey कीवर्ड को एम्युलेट करना है.

ग्लोब यूआरएल वे होते हैं जिनमें "वाइल्डकार्ड" * और सवाल के निशान होते हैं. वाइल्डकार्ड *, खाली स्ट्रिंग के साथ-साथ किसी भी लंबाई की किसी भी स्ट्रिंग से मैच करता है, जबकि सवाल का निशान ? किसी एक वर्ण से मेल खाता है.

कॉन्टेंट स्क्रिप्ट को पेज में इंजेक्ट किया जाता है, अगर:

  • इसका यूआरएल किसी भी "matches" और "include_globs" पैटर्न से मेल खाता है.
  • यूआरएल, "exclude_matches" या "exclude_globs" पैटर्न से मैच नहीं करता.

ग्लोब और यूआरएल के मिलान के उदाहरण

"include_globs"

manifest.json

{
  ...
  "content_scripts": [
    {
      "matches": ["https://*.example.com/*"],
      "include_globs": ["https://???.example.com/foo/*"],
      "js": ["content-script.js"]
    }
  ],
  ...
}
मैच करती स्ट्रिंग
https://www.example.com/foo/bar
https://the.example.com/foo/
मिलान नहीं होता है
https://my.example.com/foo/bar
https://example.com/foo/*
https://www.example.com/foo

manifest.json

{
  ...
  "content_scripts": [
    {
      "matches": ["https://*.example.com/*"],
      "include_globs": ["*example.com/???s/*"],
      "js": ["content-script.js"]
    }
  ],
  ...
}
मैच करती स्ट्रिंग
https://www.example.com/arts/index.html
https://www.example.com/jobs/index.html
मिलान नहीं होता है
https://www.example.com/sports/index.html
https://www.example.com/music/index.html

"exclude_globs"

manifest.json

{
  ...
  "content_scripts": [
    {
      "matches": ["https://*.example.com/*"],
      "exclude_globs": ["*science*"],
      "js": ["content-script.js"]
    }
  ],
  ...
}
मैच करती स्ट्रिंग
https://history.example.com
https://.example.com/music
मिलान नहीं होता है
https://science.example.com
https://www.example.com/science

बेहतर कस्टमाइज़ेशन का उदाहरण

manifest.json

{
  ...
  "content_scripts": [
    {
      "matches": ["https://*.example.com/*"],
      "exclude_matches": ["*://*/*business*"],
      "include_globs": ["*example.com/???s/*"],
      "exclude_globs": ["*science*"],
      "js": ["content-script.js"]
    }
  ],
  ...
}
मैच करती स्ट्रिंग
https://www.example.com/arts/index.html
https://.example.com/jobs/index.html
मिलान नहीं होता है
https://science.example.com
https://www.example.com/jobs/business
https://www.example.com/science

फ़्रेम

"all_frames" कुंजी से यह पता चलता है कि कॉन्टेंट स्क्रिप्ट को, बताए गए यूआरएल की ज़रूरी शर्तों से मेल खाने वाले सभी फ़्रेम में इंजेक्ट किया जाना चाहिए या नहीं. अगर इसे false पर सेट किया जाता है, तो इसे सिर्फ़ सबसे ऊपर वाले फ़्रेम में इंजेक्ट किया जाएगा. इसे about:blank फ़्रेम में इंजेक्ट करने के लिए, "match_about_blank" के साथ इस्तेमाल किया जा सकता है.

data:, blob:, और filesystem: जैसे दूसरे फ़्रेम में इंजेक्ट करने के लिए, "match_origin_as_fallback" को true पर सेट करें. ज़्यादा जानकारी के लिए, मिलते-जुलते फ़्रेम में इंजेक्ट करना देखें

"all_frames" बूलियन
ज़रूरी नहीं है. डिफ़ॉल्ट तौर पर, यह false होता है. इसका मतलब है कि सिर्फ़ टॉप फ़्रेम मैच करता है. अगर इसे 'सही है' पर सेट किया जाता है, तो टैब में फ़्रेम सबसे ऊपर मौजूद फ़्रेम न होने पर भी, सभी फ़्रेम में इंजेक्ट किया जाएगा. यूआरएल की ज़रूरी शर्तों के लिए, हर फ़्रेम की अलग से जांच की जाती है. अगर यूआरएल की ज़रूरी शर्तें पूरी नहीं होती हैं, तो इसे चाइल्ड फ़्रेम में नहीं डाला जाएगा.
"match_about_blank"- बूलियन
ज़रूरी नहीं है. डिफ़ॉल्ट वैल्यू false होती है. स्क्रिप्ट को ऐसे about:blank फ़्रेम में इंजेक्ट करना चाहिए या नहीं जहां पैरंट यूआरएल, "matches" में बताए गए किसी पैटर्न से मेल खाता हो.
"match_origin_as_fallback" - बूलियन
ज़रूरी नहीं है. डिफ़ॉल्ट वैल्यू false होती है. स्क्रिप्ट को ऐसे फ़्रेम में इंजेक्ट करना चाहिए या नहीं जिन्हें किसी मिलते-जुलते ऑरिजिन से बनाया गया था. हालांकि, हो सकता है कि जिनका यूआरएल या ऑरिजिन, पैटर्न से सीधे तौर पर मेल न खाता हो. इनमें अलग-अलग स्कीम वाले फ़्रेम शामिल हैं, जैसे कि about:, data:, blob:, और filesystem:.

रनटाइम और एक्ज़ीक्यूशन एनवायरमेंट

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

"run_at" - document_start | document_end | document_idle
ज़रूरी नहीं है. इससे पता चलता है कि स्क्रिप्ट को पेज में कब इंजेक्ट किया जाना चाहिए. यह Document.readyState की लोडिंग स्थितियों के मुताबिक है:
  • "document_start": DOM अब भी लोड हो रहा है.
  • "document_end": पेज के संसाधन अब भी लोड हो रहे हैं
  • "document_idle": डीओएम और संसाधन लोड हो गए हैं. यह डिफ़ॉल्ट रूप से होता है.
"world" - ISOLATED | MAIN
ज़रूरी नहीं है. स्क्रिप्ट के लिए JavaScript की दुनिया जिसे काम करना है. डिफ़ॉल्ट तौर पर, "ISOLATED" होता है. यह कॉन्टेंट स्क्रिप्ट के लिए एक्ज़ीक्यूशन एनवायरमेंट होता है. "MAIN" दुनिया चुनने का मतलब है कि स्क्रिप्ट, होस्ट पेज के JavaScript के साथ एक्ज़ीक्यूशन एनवायरमेंट शेयर करेगी. ज़्यादा जानने के लिए अलग-अलग जगहों में काम करना देखें.

उदाहरण

मेनिफ़ेस्ट में कॉन्टेंट स्क्रिप्ट इंजेक्ट करने वाला एक्सटेंशन बनाने के लिए, हर पेज पर चलाएं ट्यूटोरियल देखें.