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

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

यूआरएल मैच करना

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

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

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

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

  • इसका यूआरएल, "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 पर सेट किया जाता है, तो यह सिर्फ़ सबसे ऊपर वाले फ़्रेम में इंजेक्ट होगा. इसका इस्तेमाल "match_about_blank" के साथ किया जा सकता है, ताकि इसे about:blank फ़्रेम में इंजेक्ट किया जा सके.

data:, blob:, और filesystem: जैसे अन्य फ़्रेम में इंजेक्ट करने के लिए, "match_origin_as_fallback" को true पर सेट करें. ज़्यादा जानकारी के लिए, Inject in related frames देखें

"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 के साथ एक्ज़ीक्यूशन एनवायरमेंट को शेयर करेगी. ज़्यादा जानने के लिए, आइसोलेटेड वर्ल्ड में काम करना देखें.

उदाहरण

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