বিবরণ
পৃষ্ঠার কন্টেন্ট পড়ার অনুমতি না নিয়েই, পৃষ্ঠার কন্টেন্টের উপর নির্ভর করে অ্যাকশন নিতে chrome.declarativeContent API ব্যবহার করুন।
অনুমতি
declarativeContentধারণা ও ব্যবহার
Declarative Content API আপনাকে কোনও ওয়েবপেজের URL-এর উপর নির্ভর করে অথবা কোনও CSS সিলেক্টর পৃষ্ঠার কোনও এলিমেন্টের সাথে ম্যাচ করলে, আপনার এক্সটেনশনের অ্যাকশন চালু করতে দেয়। এর জন্য আপনাকে হোস্ট অনুমতি যোগ করতে বা কন্টেন্ট স্ক্রিপ্ট ইনজেক্ট করতে হয় না।
ব্যবহারকারী এক্সটেনশনের অ্যাকশনে ক্লিক করার পরে কোনও পৃষ্ঠার সাথে ইন্টার্যাক্ট করতে activeTab অনুমতি ব্যবহার করুন।
নিয়ম
নিয়মের মধ্যে শর্ত ও অ্যাকশন থাকে। কোনও একটি শর্ত পূরণ হলে, সব অ্যাকশন
এক্সিকিউট করা হয়। অ্যাকশনগুলি হল setIcon() ও showAction()।
PageStateMatcher তখনই ওয়েব পৃষ্ঠা ম্যাচ করে যখন তালিকাভুক্ত
সব শর্ত পূরণ হয়। এটি কোনও পৃষ্ঠার URL, CSS কম্পাউন্ড বাছাইকারী
অথবা কোনও পৃষ্ঠার বুকমার্ক করা অবস্থার সাথে ম্যাচ করতে পারে। নিম্নলিখিত নিয়মটি পাসওয়ার্ড ফিল্ড উপস্থিত থাকলে
Google পৃষ্ঠায় এক্সটেনশনের অ্যাকশন চালু করে:
let rule1 = {
conditions: [
new browser.declarativeContent.PageStateMatcher({
pageUrl: { hostSuffix: '.google.com', schemes: ['https'] },
css: ["input[type='password']"]
})
],
actions: [ new browser.declarativeContent.ShowAction() ]
};
এছাড়াও, ভিডিও সহ Google সাইটের জন্য এক্সটেনশনের অ্যাকশন চালু করতে, আপনি একটি দ্বিতীয় শর্ত যোগ করতে পারেন, কারণ প্রতিটি শর্তই নির্দিষ্ট করা সব অ্যাকশন ট্রিগার করার জন্য যথেষ্ট:
let rule2 = {
conditions: [
new browser.declarativeContent.PageStateMatcher({
pageUrl: { hostSuffix: '.google.com', schemes: ['https'] },
css: ["input[type='password']"]
}),
new browser.declarativeContent.PageStateMatcher({
css: ["video"]
})
],
actions: [ new browser.declarativeContent.ShowAction() ]
};
onPageChanged ইভেন্ট পরীক্ষা করে দেখে যে কোনও নিয়মে অন্তত একটি সম্পূর্ণ
শর্ত আছে কিনা এবং অ্যাকশন প্রয়োগ করে। ব্রাউজিং সেশন জুড়ে নিয়মগুলি বজায় থাকে; তাই এক্সটেনশন ইনস্টল করার সময়
আপনাকে প্রথমে removeRules ব্যবহার করে আগে ইনস্টল করা নিয়ম
মুছে দিতে হবে এবং তারপর নতুন নিয়ম রেজিস্টার করতে addRules ব্যবহার করতে হবে।
browser.runtime.onInstalled.addListener(function(details) {
browser.declarativeContent.onPageChanged.removeRules(undefined, function() {
browser.declarativeContent.onPageChanged.addRules([rule2]);
});
});
activeTab অনুমতি থাকলে, আপনার এক্সটেনশন কোনও অনুমতি সতর্কতা দেখাবে না এবং ব্যবহারকারী এক্সটেনশন অ্যাকশনে ক্লিক করলে, এটি শুধুমাত্র প্রাসঙ্গিক পৃষ্ঠাতেই চলবে।
পৃষ্ঠার URL ম্যাচ করা
URL সংক্রান্ত শর্ত পূরণ হলে PageStateMatcher.pageurl ম্যাচ করে। সবচেয়ে সাধারণ মানদণ্ড হল হোস্ট, পাথ বা URL-এর কনক্যাটেনেশন, তারপরে থাকে কন্টেন, ইকুয়াল, প্রিফিক্স বা
সাফিক্স। নিচের টেবিলে কয়েকটি উদাহরণ দেওয়া হল:
| মানদণ্ড | ম্যাচ |
|---|---|
{ hostSuffix: 'google.com' } |
সব Google URL |
{ pathPrefix: '/docs/extensions' } |
এক্সটেনশন ডকুমেন্টেশনের URL |
{ urlContains: 'developer.chrome.com' } |
সব Chrome ডেভেলপার ডকুমেন্ট URL |
সব মাপকাঠি ছোট ও বড় হাতের অক্ষর সংবেদনশীল। মানদণ্ডের সম্পূর্ণ তালিকা দেখতে, UrlFilter দেখুন।
CSS ম্যাচ করা
PageStateMatcher.css কন্ডিশন অবশ্যই কম্পাউন্ড সিলেক্টর হতে হবে,
অর্থাৎ, আপনার
সিলেক্টরে হোয়াইটস্পেস বা ">"-এর মতো কম্বিনেটর যোগ করতে পারবেন না। এটি Chrome-কে আরও দক্ষতার সাথে নির্বাচক মেলাতে সাহায্য করে।
| কম্পাউন্ড সিলেক্টর (ঠিক আছে) | জটিল সিলেক্টর (ঠিক নয়) |
|---|---|
a |
div p |
iframe.special[src^='http'] |
p>span.highlight |
ns|* |
p + ol |
#abcd:checked |
p::first-line |
CSS কন্ডিশন শুধুমাত্র দেখানো এলিমেন্টের সাথে ম্যাচ করে: আপনার বাছাইকারীর সাথে ম্যাচ করা কোনও এলিমেন্ট
display:none হলে অথবা সেটির কোনও প্যারেন্ট এলিমেন্ট display:none হলে, এর ফলে কন্ডিশন ম্যাচ
করে না। visibility:hidden-এর মাধ্যমে স্টাইল করা, স্ক্রিনের বাইরে পজিশন করা বা অন্যান্য এলিমেন্টের মাধ্যমে লুকানো এলিমেন্ট
আপনার কন্ডিশন ম্যাচ করাতে পারে।
বুকমার্ক করা স্ট্যাটাস ম্যাচ করা
PageStateMatcher.isBookmarked কন্ডিশন ব্যবহারকারীর প্রোফাইলে বর্তমান URL-এর বুকমার্ক করা স্ট্যাটাস
ম্যাচ করার অনুমতি দেয়। এই কন্ডিশনের সুবিধা নিতে, এক্সটেনশনের মেনিফেস্টে "বুকমার্ক" অনুমতি ঘোষণা করতে হবে।
ধরন
ImageDataType
https://developer.mozilla.org/en-US/docs/Web/API/ImageData দেখুন।
ধরন
ImageData
PageStateMatcher
বিভিন্ন মাপকাঠির ভিত্তিতে ওয়েবপেজের স্ট্যাটাস ম্যাচ করে।
প্রপার্টি
-
কনস্ট্রাক্টর
বাতিল
constructorফাংশনটি দেখতে এইরকম:(arg: PageStateMatcher) =& gt;{...}
-
arg
-
ফেরত দেওয়া
-
-
css
string[] ঐচ্ছিক
অ্যারের মধ্যে থাকা সব CSS বাছাইকারী যদি পৃষ্ঠার মূল ফ্রেমের মতো একই অরিজিন সহ কোনও ফ্রেমে দেখানো এলিমেন্টের সাথে মেলে, তাহলে ম্যাচ করে। ম্যাচ করার প্রসেস দ্রুত করতে, এই অ্যারের সব নির্বাচককে অবশ্যই যৌগিক নির্বাচক হতে হবে। মনে রাখবেন: শত শত CSS সিলেক্টর তালিকাভুক্ত করা বা প্রতি পৃষ্ঠায় শত শত বার ম্যাচ করে এমন CSS সিলেক্টর তালিকাভুক্ত করা, ওয়েবসাইটকে ধীরগতির করে দিতে পারে।
-
isBookmarked
বুলিয়ান ঐচ্ছিক
Chrome 45+পৃষ্ঠার বুকমার্ক করা অবস্থা নির্দিষ্ট মানের সমান হলে ম্যাচ করে। বুকমার্ক সংক্রান্ত অনুমতি প্রয়োজন।
-
pageUrl
UrlFilter ঐচ্ছিক
পৃষ্ঠার টপ-লেভেল URL-এর জন্য
UrlFilter-এর শর্ত পূরণ হলে ম্যাচ করে।
RequestContentScript
কন্টেন্ট স্ক্রিপ্ট ইনজেক্ট করে এমন ডিক্ল্যারেটিভ ইভেন্ট অ্যাকশন।
সতর্কতা: এই অ্যাকশন এখনও পরীক্ষামূলক পর্যায়ে আছে এবং Chrome-এর স্থিতিশীল বিল্ডে কাজ করে না।
প্রপার্টি
-
কনস্ট্রাক্টর
বাতিল
constructorফাংশনটি দেখতে এইরকম:(arg: RequestContentScript) =& gt;{...}
-
ফেরত দেওয়া
-
-
allFrames
বুলিয়ান ঐচ্ছিক
ম্যাচ করা পৃষ্ঠার সব ফ্রেমে কন্টেন্ট স্ক্রিপ্ট রান করে নাকি শুধু সবচেয়ে উপরের ফ্রেমে। ডিফল্ট হল
false। -
css
string[] ঐচ্ছিক
কন্টেন্ট স্ক্রিপ্টের অংশ হিসেবে ইনজেক্ট করা CSS ফাইলের নাম।
-
js
string[] ঐচ্ছিক
কন্টেন্ট স্ক্রিপ্টের অংশ হিসেবে ইনজেক্ট করা জাভাস্ক্রিপ্ট ফাইলের নাম।
-
matchAboutBlank
বুলিয়ান ঐচ্ছিক
about:blankওabout:srcdoc-এ কন্টেন্ট স্ক্রিপ্ট যোগ করতে হবে কিনা। ডিফল্ট হলfalse।
SetIcon
সংশ্লিষ্ট শর্ত পূরণ হলে এক্সটেনশনের পেজ অ্যাকশন বা ব্রাউজার অ্যাকশনের জন্য n-dip স্কোয়ার আইকন সেট করে এমন ডিক্লেয়ারেটিভ ইভেন্ট অ্যাকশন। এই অ্যাকশন হোস্ট অনুমতি ছাড়াই ব্যবহার করা যেতে পারে, তবে এক্সটেনশনে অবশ্যই কোনও পৃষ্ঠা বা ব্রাউজার অ্যাকশন থাকতে হবে।
imageData বা path-এর মধ্যে ঠিক একটি উল্লেখ করতে হবে। দুটিই হল ডিকশনারি যা কোনও ছবির উপস্থাপনার সাথে একাধিক পিক্সেল ম্যাপ করে। imageData-এ ছবির উপস্থাপনা হল একটি ImageData অবজেক্ট; যেমন, canvas এলিমেন্ট থেকে, যেখানে path-এ ছবির উপস্থাপনা হল এক্সটেনশনের ম্যানিফেস্টের সাথে সম্পর্কিত একটি ইমেজ ফাইলের পাথ। scale স্ক্রিন পিক্সেল যদি ডিভাইস-নিরপেক্ষ পিক্সেলের মধ্যে ফিট করে, তাহলে scale * n আইকন ব্যবহার করা হয়। সেই স্কেল না থাকলে, অন্য একটি ছবিকে প্রয়োজনীয় সাইজে রিসাইজ করা হয়।
প্রপার্টি
-
কনস্ট্রাক্টর
বাতিল
constructorফাংশনটি দেখতে এইরকম:(arg: SetIcon) =& gt;{...}
-
arg
-
ফেরত দেওয়া
-
-
imageData
ImageData | object ঐচ্ছিক
সেট করার জন্য আইকনকে প্রতিনিধিত্বকারী
ImageDataঅবজেক্ট বা ডিকশনারি {size -> ImageData}। আইকনটি যদি একটি অভিধান হিসেবে নির্দিষ্ট করা থাকে, তাহলে ব্যবহৃত ছবিটি স্ক্রিনের পিক্সেল ঘনত্বের উপর নির্ভর করে বেছে নেওয়া হয়। একটি স্ক্রিন স্পেস ইউনিটে ফিট করা ছবির পিক্সেলের সংখ্যাscale-এর সমান হলে,scale * nসাইজের একটি ছবি বেছে নেওয়া হয়, যেখানে n হল UI-তে আইকনের সাইজ। অন্তত একটি ছবি উল্লেখ করতে হবে। মনে রাখবেন,details.imageData = fooহলdetails.imageData = {'16': foo}-এর সমতুল্য।
ShowAction
একটি ডিক্ল্যারেটিভ ইভেন্ট অ্যাকশন যা সংশ্লিষ্ট শর্ত পূরণ হলে এক্সটেনশনের টুলবার অ্যাকশন চালু অবস্থায় সেট করে। হোস্টের অনুমতি ছাড়াই এই অ্যাকশন ব্যবহার করা যেতে পারে। এক্সটেনশনের activeTab অনুমতি থাকলে, পৃষ্ঠা অ্যাকশনে ক্লিক করলে অ্যাক্টিভ ট্যাবে অ্যাক্সেস দেওয়া হয়।
যেসব পৃষ্ঠায় শর্ত পূরণ হয় না, সেখানে এক্সটেনশনের টুলবার অ্যাকশন গ্রে-স্কেলে থাকবে এবং সেটিতে ক্লিক করলে অ্যাকশন ট্রিগার না হয়ে সংশ্লিষ্ট মেনু খুলবে।
প্রপার্টি
-
কনস্ট্রাক্টর
বাতিল
constructorফাংশনটি দেখতে এইরকম:(arg: ShowAction) =& gt;{...}
-
arg
-
ফেরত দেওয়া
-
ShowPageAction
declarativeContent.ShowAction ব্যবহার করুন।
একটি ডিক্ল্যারেটিভ ইভেন্ট অ্যাকশন যা সংশ্লিষ্ট শর্ত পূরণ হলে এক্সটেনশনের পেজ অ্যাকশন চালু অবস্থায় সেট করে। এই অ্যাকশন হোস্ট অনুমতি ছাড়াই ব্যবহার করা যেতে পারে, তবে এক্সটেনশনে অবশ্যই একটি পৃষ্ঠা অ্যাকশন থাকতে হবে। এক্সটেনশনের activeTab অনুমতি থাকলে, পৃষ্ঠা অ্যাকশনে ক্লিক করলে অ্যাক্টিভ ট্যাবে অ্যাক্সেস দেওয়া হয়।
যেসব পৃষ্ঠায় শর্ত পূরণ হয় না, সেখানে এক্সটেনশনের টুলবার অ্যাকশন গ্রে-স্কেলে থাকবে এবং সেটিতে ক্লিক করলে অ্যাকশন ট্রিগার না হয়ে সংশ্লিষ্ট মেনু খুলবে।
প্রপার্টি
-
কনস্ট্রাক্টর
বাতিল
constructorফাংশনটি দেখতে এইরকম:(arg: ShowPageAction) =& gt;{...}
-
arg
-
ফেরত দেওয়া
-
ইভেন্ট
onPageChanged
Declarative Event API প্রদান করে যার মধ্যে addRules, removeRules ও getRules থাকে।