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

"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",
   }
 ],
 ...
}

फ़ाइलें

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

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

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

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

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

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

कॉन्टेंट स्क्रिप्ट को किसी पेज में तब डाला जाता है, जब:

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

उदाहरण

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