"content_scripts" কী, স্ট্যাটিক্যালি লোড করা জাভাস্ক্রিপ্ট বা CSS ফাইল নির্দিষ্ট করে যা নির্দিষ্ট URL প্যাটার্ন-এর সাথে ম্যাচ করা কোনও পৃষ্ঠা খোলার সময় ব্যবহার করা হয়। এক্সটেনশন প্রোগ্রাম্যাটিক্যালি কন্টেন্ট স্ক্রিপ্ট ইনজেক্ট করতে পারে, বিস্তারিত জানতে স্ক্রিপ্ট ইনজেক্ট করা দেখুন।
ম্যানিফেস্ট
"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"- অ্যারে- ঐচ্ছিক। CSS ফাইল পাথের একটি অ্যারে, এই অ্যারের ক্রমে এবং কোনও DOM কনস্ট্রাকশন বা পৃষ্ঠা রেন্ডারিং হওয়ার আগে ইনজেক্ট করা হয়।
"js"- অ্যারে,- ঐচ্ছিক। JavaScript ফাইল পাথের একটি অ্যারে, css ফাইল ইনজেক্ট করার পরে এই অ্যারেতে যেভাবে দেখানো হয়েছে সেই ক্রমে ইনজেক্ট করা হয়েছে। অ্যারের প্রতিটি স্ট্রিং অবশ্যই এক্সটেনশনের রুট ডিরেক্টরিতে কোনও রিসোর্সের রিলেটিভ পাথ হতে হবে। শুরুর স্ল্যাশ ('/') অটোমেটিক ট্রিম করা হয়।
URL মেলান
শুধুমাত্র "matches" প্রপার্টি প্রয়োজন। তারপর, কোন URL-এ কোড ইনজেক্ট করতে হবে তা কাস্টমাইজ করতে আপনি "exclude_matches", "include_globs" ও "exclude_globs" ব্যবহার করতে পারবেন। "matches" কী সতর্কতা ট্রিগার করবে।
"matches"- অ্যারে- প্রয়োজনীয়। কোন URL প্যাটার্নে কন্টেন্ট স্ক্রিপ্ট ইনজেক্ট করতে হবে তা নির্দিষ্ট করে। সিনট্যাক্সের জন্য প্যাটার্ন ম্যাচ করুন বিকল্প দেখুন।
"exclude_matches"- অ্যারে- ঐচ্ছিক। সামগ্রী স্ক্রিপ্টগুলি এতে ইনজেক্ট করতে URL প্যাটার্নগুলি বাদ দেয়৷ সিনট্যাক্সের জন্য প্যাটার্ন ম্যাচ করুন বিকল্প দেখুন।
"include_globs"- অ্যারে- ঐচ্ছিক। ম্যাচ করার পরে প্রয়োগ করা হয় যাতে শুধুমাত্র সেইসব URL অন্তর্ভুক্ত করা যায় যেগুলি এই গ্লবের সাথেও ম্যাচ করে। @include Greasemonkey কীওয়ার্ড অনুকরণ করার জন্য তৈরি করা হয়েছে।
"exclude_globs"- অ্যারে- ঐচ্ছিক। এই গ্লবের সাথে ম্যাচ করে এমন URL বাদ দেওয়ার জন্য ম্যাচ করার পরে প্রয়োগ করা হয়। @exclude Greasemonkey কীওয়ার্ড অনুকরণ করার জন্য তৈরি।
Glob URL হল সেইসব URL যাতে "ওয়াইল্ডকার্ড" * এবং প্রশ্নচিহ্ন থাকে। ওয়াইল্ডকার্ড * খালি স্ট্রিং সহ যেকোনও দৈর্ঘ্যের যেকোনও স্ট্রিংয়ের সাথে ম্যাচ করে, যেখানে প্রশ্নচিহ্ন ? যেকোনও একটি অক্ষরের সাথে মেলে।
কন্টেন্ট স্ক্রিপ্ট কোনও পৃষ্ঠায় ইনজেক্ট করা হয় যদি:
- এটির URL যেকোনও
"matches"এবং"include_globs"প্যাটার্নের সাথে ম্যাচ করে। - এবং URL-টি
"exclude_matches"বা"exclude_globs"প্যাটার্নের সাথে মেলে না।
গ্লব ও URL ম্যাচিংয়ের উদাহরণ
"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" কী নির্দিষ্ট করে যে কন্টেন্ট স্ক্রিপ্ট নির্দিষ্ট করা URL-এর প্রয়োজনীয়তার সাথে ম্যাচ করা সব ফ্রেমে ইনজেক্ট করা উচিত কিনা। false-এ সেট করা হলে, এটি শুধুমাত্র সবচেয়ে উপরের ফ্রেমে ইনজেক্ট করবে। এটি "match_about_blank"-এর সাথে ব্যবহার করা যেতে পারে যাতে about:blank ফ্রেমে ইনজেক্ট করা যায়।
data:, blob: এবং filesystem:-এর মতো অন্যান্য ফ্রেমে ইনজেক্ট করতে, "match_origin_as_fallback"-কে true-এ সেট করুন। বিস্তারিত জানতে, সম্পর্কিত ফ্রেমে ইনজেক্ট করুন দেখুন
"all_frames"বুলিয়ান- ঐচ্ছিক। ডিফল্ট হিসেবে
false-এ সেট করা থাকে, যার অর্থ হল শুধুমাত্র উপরের ফ্রেমটি ম্যাচ করা হয়। এটি 'সত্য' হিসেবে সেট করা হলে, এটি সমস্ত ফ্রেমে ইনজেক্ট করবে, এমনকি ফ্রেমটি ট্যাবের সবচেয়ে উপরের ফ্রেম না হলেও। URL সংক্রান্ত প্রয়োজনীয়তার জন্য প্রতিটি ফ্রেম আলাদাভাবে চেক করা হয়, URL সংক্রান্ত প্রয়োজনীয়তা পূরণ না হলে এটি চাইল্ড ফ্রেমে ইনজেক্ট করা হবে না। "match_about_blank"- বুলিয়ান- ঐচ্ছিক। ডিফল্ট হিসেবে
falseসেট করা থাকে। স্ক্রিপ্টটিabout:blankফ্রেমে ইনজেক্ট করা উচিত কিনা যেখানে মূল URL"matches"-এ ঘোষিত প্যাটার্নগুলির একটির সাথে মেলে। "match_origin_as_fallback"- বুলিয়ান- ঐচ্ছিক। ডিফল্ট হিসেবে
falseসেট করা থাকে। স্ক্রিপ্টটি এমন ফ্রেমে ইনজেক্ট করা উচিত কিনা যা একটি ম্যাচিং অরিজিন দ্বারা তৈরি করা হয়েছে, কিন্তু যার URL বা অরিজিন সরাসরি প্যাটার্নের সাথে নাও মিলতে পারে। এর মধ্যে বিভিন্ন স্কিম সহ ফ্রেম অন্তর্ভুক্ত, যেমনabout:,data:,blob:এবংfilesystem:।
রান টাইম ও এক্সিকিউশন এনভায়রনমেন্ট
ডিফল্ট হিসেবে, ডকুমেন্ট এবং সব রিসোর্স লোড করা শেষ হলে কন্টেন্ট স্ক্রিপ্ট ইনজেক্ট করা হয় এবং একটি ব্যক্তিগত বিচ্ছিন্ন এক্সিকিউশন এনভায়রনমেন্টে থাকে যা পৃষ্ঠা বা অন্যান্য এক্সটেনশনের মাধ্যমে অ্যাক্সেস করা যায় না। আপনি নিম্নলিখিত 'কী' ব্যবহার করে এইসব ডিফল্ট পরিবর্তন করতে পারবেন:
"run_at"-document_start|document_end|document_idle- ঐচ্ছিক। পৃষ্ঠায় কখন স্ক্রিপ্ট ইনজেক্ট করা হবে তা উল্লেখ করে। এটি Document.readyState-এর লোডিং স্ট্যাটাসের সাথে সম্পর্কিত:
"document_start": DOM এখনও লোড হচ্ছে।"document_end": পৃষ্ঠার রিসোর্স এখনও লোড হচ্ছে"document_idle": DOM এবং রিসোর্স লোড করা সম্পূর্ণ হয়েছে। এটি ডিফল্ট বিকল্প।
"world"-ISOLATED|MAIN- ঐচ্ছিক। স্ক্রিপ্ট এক্সিকিউট করার জন্য জাভাস্ক্রিপ্ট ওয়ার্ল্ড। ডিফল্ট হিসেবে
"ISOLATED"সেট করা থাকে, যা কন্টেন্ট স্ক্রিপ্টের জন্য অনন্য এক্সিকিউশন এনভায়রনমেন্ট।"MAIN"ওয়ার্ল্ড বেছে নেওয়ার অর্থ হল, স্ক্রিপ্টটি হোস্ট পৃষ্ঠার জাভাস্ক্রিপ্টের সাথে এক্সিকিউশন এনভায়রনমেন্ট শেয়ার করবে। আরও জানতে আইসোলেটেড ওয়ার্ল্ডে কাজ করা দেখুন।
উদাহরণ
ম্যানিফেস্টে কন্টেন্ট স্ক্রিপ্ট ইনজেক্ট করে এমন এক্সটেনশন তৈরি করতে প্রতিটি পৃষ্ঠায় রান করুন টিউটোরিয়াল দেখুন।