বর্ণনা
ইনস্টল করার সময়ের পরিবর্তে রান টাইমে ঘোষিত ঐচ্ছিক অনুমতিগুলো অনুরোধ করতে chrome.permissions API ব্যবহার করুন, যাতে ব্যবহারকারীরা বুঝতে পারেন কেন অনুমতিগুলো প্রয়োজন এবং শুধুমাত্র প্রয়োজনীয় অনুমতিগুলোই প্রদান করেন।
ধারণা এবং ব্যবহার
একটি এপিআই (API) দ্বারা প্রদত্ত ক্ষমতাগুলো বর্ণনা করার জন্য পারমিশন ওয়ার্নিং (Permission warnings) থাকে, কিন্তু এই ওয়ার্নিংগুলোর মধ্যে কিছু কিছু সহজে বোঝা যায় না। পারমিশন এপিআই (Permissions API) ডেভেলপারদের পারমিশন ওয়ার্নিংগুলো ব্যাখ্যা করতে এবং ধীরে ধীরে নতুন ফিচার চালু করতে সাহায্য করে, যা ব্যবহারকারীদের এক্সটেনশনটির সাথে একটি ঝুঁকিমুক্ত পরিচিতি দেয়। এইভাবে, ব্যবহারকারীরা নির্দিষ্ট করে দিতে পারেন যে তারা কতটা অ্যাক্সেস দিতে ইচ্ছুক এবং কোন ফিচারগুলো তারা চালু করতে চান।
উদাহরণস্বরূপ, ঐচ্ছিক পারমিশন এক্সটেনশনটির মূল কার্যকারিতা হলো নতুন ট্যাব পৃষ্ঠাটিকে ওভাররাইড করা। এর একটি বৈশিষ্ট্য হলো ব্যবহারকারীর দিনের লক্ষ্য প্রদর্শন করা। এই বৈশিষ্ট্যটির জন্য শুধুমাত্র স্টোরেজ পারমিশন প্রয়োজন, যাতে কোনো সতর্কবার্তা অন্তর্ভুক্ত থাকে না। এক্সটেনশনটিতে একটি অতিরিক্ত বৈশিষ্ট্য রয়েছে, যা ব্যবহারকারীরা নিম্নলিখিত বোতামটিতে ক্লিক করে সক্রিয় করতে পারেন:

ব্যবহারকারীর শীর্ষ সাইটগুলি প্রদর্শন করার জন্য topSites অনুমতির প্রয়োজন, যেটির সাথে নিম্নলিখিত সতর্কতাটি রয়েছে।

topSites API-এর জন্য একটি এক্সটেনশন সতর্কতা ঐচ্ছিক অনুমতি বাস্তবায়ন করুন
ধাপ ১: কোন অনুমতিগুলো আবশ্যক এবং কোনগুলো ঐচ্ছিক তা নির্ধারণ করুন।
একটি এক্সটেনশন প্রয়োজনীয় এবং ঐচ্ছিক উভয় প্রকারের অনুমতি ঘোষণা করতে পারে। সাধারণভাবে, আপনার উচিত:
- আপনার এক্সটেনশনের মৌলিক কার্যকারিতার জন্য যখন প্রয়োজন, তখনই প্রয়োজনীয় অনুমতিগুলো ব্যবহার করুন।
- আপনার এক্সটেনশনের ঐচ্ছিক বৈশিষ্ট্যগুলির জন্য যখন প্রয়োজন হয়, তখনই ঐচ্ছিক অনুমতিগুলি ব্যবহার করুন।
প্রয়োজনীয় অনুমতির সুবিধাগুলো হলো:
- কমবার অনুরোধ: একটি এক্সটেনশন সমস্ত অনুমতি গ্রহণ করার জন্য ব্যবহারকারীকে একবার অনুরোধ করতে পারে।
- সহজতর উন্নয়ন: প্রয়োজনীয় অনুমতিগুলোর উপস্থিতি নিশ্চিত করা হয়।
ঐচ্ছিক অনুমতির সুবিধাসমূহ:
- উন্নততর নিরাপত্তা: এক্সটেনশনগুলো কম অনুমতি নিয়ে চলে, কারণ ব্যবহারকারীরা কেবল প্রয়োজনীয় অনুমতিগুলোই সক্রিয় করেন।
- ব্যবহারকারীদের জন্য উন্নততর তথ্য: ব্যবহারকারী যখন কোনো নির্দিষ্ট ফিচার চালু করেন, তখন এক্সটেনশনটি ব্যাখ্যা করতে পারে যে কেন সেটির একটি বিশেষ অনুমতির প্রয়োজন।
- সহজতর আপগ্রেড: আপনি যখন আপনার এক্সটেনশন আপগ্রেড করবেন, তখন যদি আপগ্রেডটি আবশ্যকীয় অনুমতির পরিবর্তে ঐচ্ছিক অনুমতি যোগ করে, তাহলেও Chrome আপনার ব্যবহারকারীদের জন্য এটি নিষ্ক্রিয় করবে না।
ধাপ ২: ম্যানিফেস্টে ঐচ্ছিক অনুমতিগুলো ঘোষণা করুন।
আপনার এক্সটেনশন ম্যানিফেস্টে ` optional_permissions কী ব্যবহার করে ঐচ্ছিক অনুমতিগুলো ঘোষণা করুন এবং এর জন্য `permissions` ফিল্ডের মতো একই ফরম্যাট ব্যবহার করুন:
{
"name": "My extension",
...
"optional_permissions": ["tabs"],
"optional_host_permissions": ["https://www.google.com/"],
...
}
আপনি যদি এমন হোস্টের জন্য অনুরোধ করতে চান যা শুধুমাত্র রানটাইমে আবিষ্কৃত হয়, তাহলে আপনার এক্সটেনশনের optional_host_permissions ফিল্ডে "https://*/*" অন্তর্ভুক্ত করুন। এটি আপনাকে "Permissions.origins" এ যেকোনো অরিজিন নির্দিষ্ট করার সুযোগ দেয়, যতক্ষণ পর্যন্ত সেটির স্কিম মিলে যায়।
যে অনুমতিগুলো ঐচ্ছিক হিসেবে নির্দিষ্ট করা যায় না
বেশিরভাগ ক্রোম এক্সটেনশনের অনুমতি ঐচ্ছিক হিসেবে নির্দিষ্ট করা যেতে পারে, তবে নিম্নলিখিত ব্যতিক্রমগুলো রয়েছে।
| অনুমতি | বর্ণনা |
|---|---|
"debugger" | browser.debugger এপিআইটি ক্রোমের রিমোট ডিবাগিং প্রোটোকলের একটি বিকল্প মাধ্যম হিসেবে কাজ করে। |
"declarativeNetRequest" | এক্সটেনশনটিকে browser.declarativeNetRequest API-তে অ্যাক্সেস প্রদান করে। |
"devtools" | এক্সটেনশনটি ক্রোম ডেভটুলস-এর কার্যকারিতা প্রসারিত করার সুযোগ দেয়। |
"geolocation" | এক্সটেনশনটিকে HTML5 জিওলোকেশন এপিআই ব্যবহার করার অনুমতি দেয়। |
"mdns" | এক্সটেনশনটিকে browser.mdns API ব্যবহারের অনুমতি দেয়। |
"proxy" | ক্রোমের প্রক্সি সেটিংস পরিচালনা করার জন্য এক্সটেনশনটিকে browser.proxy API-তে অ্যাক্সেস প্রদান করে। |
"tts" | browser.tts API সংশ্লেষিত টেক্সট-টু-স্পিচ (TTS) প্লে করে। |
"ttsEngine" | browser.ttsEngine API-টি একটি এক্সটেনশন ব্যবহার করে টেক্সট-টু-স্পিচ (TTS) ইঞ্জিন বাস্তবায়ন করে। |
"wallpaper" | শুধুমাত্র ChromeOS-এর জন্য । ChromeOS-এর ওয়ালপেপার পরিবর্তন করতে browser.wallpaper API ব্যবহার করুন। |
উপলব্ধ অনুমতিসমূহ এবং সেগুলোর সতর্কতা সম্পর্কে আরও তথ্যের জন্য ‘Declare Permissions’ দেখুন।
ধাপ ৩: ঐচ্ছিক অনুমতির জন্য অনুরোধ করুন
ব্যবহারকারীর অঙ্গভঙ্গির ভেতর থেকে permissions.request() ব্যবহার করে অনুমতির জন্য অনুরোধ করুন:
document.querySelector('#my-button').addEventListener('click', (event) => {
// Permissions must be requested from inside a user gesture, like a button's
// click handler.
browser.permissions.request({
permissions: ['tabs'],
origins: ['https://www.google.com/']
}, (granted) => {
// The callback argument will be true if the user granted the permissions.
if (granted) {
doSomething();
} else {
doSomethingElse();
}
});
});
অনুমতি যোগ করার ফলে যদি ব্যবহারকারী আগে থেকে দেখে ও গ্রহণ করে নেওয়া সতর্কবার্তা থেকে ভিন্ন কোনো সতর্কবার্তা আসে, তাহলে Chrome ব্যবহারকারীকে জিজ্ঞাসা করে। উদাহরণস্বরূপ, আগের কোডটির ফলে এই ধরনের একটি প্রম্পট আসতে পারে:

ধাপ ৪: এক্সটেনশনটির বর্তমান অনুমতিগুলো যাচাই করুন।
আপনার এক্সটেনশনের কোনো নির্দিষ্ট অনুমতি বা অনুমতিসমূহ আছে কিনা তা পরীক্ষা করতে, permission.contains() ব্যবহার করুন:
browser.permissions.contains({
permissions: ['tabs'],
origins: ['https://www.google.com/']
}, (result) => {
if (result) {
// The extension has the permissions.
} else {
// The extension doesn't have the permissions.
}
});
ধাপ ৫: অনুমতিগুলো মুছে ফেলুন
যখন আপনার আর প্রয়োজন হবে না, তখন অনুমতিগুলো মুছে ফেলা উচিত। কোনো অনুমতি মুছে ফেলার পর, permissions.request() কল করলে সাধারণত ব্যবহারকারীকে কোনো জিজ্ঞাসা না করেই অনুমতিটি আবার যুক্ত হয়ে যায়।
browser.permissions.remove({
permissions: ['tabs'],
origins: ['https://www.google.com/']
}, (removed) => {
if (removed) {
// The permissions have been removed.
} else {
// The permissions have not been removed (e.g., you tried to remove
// required permissions).
}
});
প্রকারভেদ
Permissions
বৈশিষ্ট্য
- উৎপত্তি
স্ট্রিং[] ঐচ্ছিক
হোস্ট পারমিশনের তালিকা, যার মধ্যে ম্যানিফেস্টের
optional_permissionsবাpermissionsকী-তে নির্দিষ্ট করা পারমিশনগুলো এবং কন্টেন্ট স্ক্রিপ্টের সাথে যুক্ত পারমিশনগুলো অন্তর্ভুক্ত। - অনুমতি
স্ট্রিং[] ঐচ্ছিক
নামযুক্ত অনুমতির তালিকা (হোস্ট বা অরিজিন অন্তর্ভুক্ত নয়)।
পদ্ধতি
addHostAccessRequest()
chrome.permissions.addHostAccessRequest(
request: object,
): Promise<void>
একটি হোস্ট অ্যাক্সেস অনুরোধ যোগ করে। অনুরোধটি শুধুমাত্র তখনই ব্যবহারকারীকে জানানো হবে, যদি এক্সটেনশনটিকে অনুরোধে থাকা হোস্টে অ্যাক্সেস দেওয়া যায়। ক্রস-অরিজিন নেভিগেশনের সময় অনুরোধটি রিসেট হয়ে যাবে। গৃহীত হলে, সাইটের শীর্ষ অরিজিনে স্থায়ী অ্যাক্সেস প্রদান করে।
প্যারামিটার
- অনুরোধ
বস্তু
- ডকুমেন্ট আইডি
স্ট্রিং ঐচ্ছিক
একটি ডকুমেন্টের আইডি যেখানে হোস্ট অ্যাক্সেসের অনুরোধগুলো দেখানো যাবে। এটি অবশ্যই একটি ট্যাবের মধ্যে থাকা শীর্ষ-স্তরের ডকুমেন্ট হতে হবে। যদি এটি প্রদান করা হয়, তাহলে অনুরোধটি নির্দিষ্ট ডকুমেন্টের ট্যাবে দেখানো হয় এবং ডকুমেন্টটি একটি নতুন অরিজিনে নেভিগেট করলে তা সরিয়ে ফেলা হয়। একটি নতুন অনুরোধ যোগ করলে
tabIdএর জন্য বিদ্যমান যেকোনো অনুরোধ বাতিল হয়ে যাবে। এটি অথবাtabIdঅবশ্যই নির্দিষ্ট করতে হবে। - প্যাটার্ন
স্ট্রিং ঐচ্ছিক
যে ইউআরএল প্যাটার্নে হোস্ট অ্যাক্সেসের অনুরোধগুলো দেখানো যাবে। এটি প্রদান করা হলে, হোস্ট অ্যাক্সেসের অনুরোধগুলো শুধুমাত্র সেইসব ইউআরএল-এ দেখানো হবে যেগুলো এই প্যাটার্নের সাথে মেলে।
- ট্যাবআইডি
সংখ্যা ঐচ্ছিক
যে ট্যাবে হোস্ট অ্যাক্সেস অনুরোধগুলি দেখানো যেতে পারে, তার আইডি। যদি এটি প্রদান করা হয়, তাহলে অনুরোধটি নির্দিষ্ট ট্যাবে দেখানো হয় এবং ট্যাবটি একটি নতুন অরিজিনে নেভিগেট করলে তা সরিয়ে ফেলা হয়। একটি নতুন অনুরোধ যোগ করলে
documentIdজন্য বিদ্যমান কোনো অনুরোধ ওভাররাইড হয়ে যাবে। `This` অথবাdocumentIdঅবশ্যই নির্দিষ্ট করতে হবে।
ফেরত
প্রতিশ্রুতি<শূন্য>
contains()
chrome.permissions.contains(
permissions: Permissions,
): Promise<boolean>
এক্সটেনশনটির নির্দিষ্ট অনুমতি আছে কিনা তা যাচাই করে।
প্যারামিটার
- অনুমতি
ফেরত
প্রতিশ্রুতি<বুলিয়ান>
ক্রোম ৯৬+
getAll()
chrome.permissions.getAll(): Promise<Permissions>
এক্সটেনশনটির বর্তমান অনুমতিসমূহ সংগ্রহ করে।
ফেরত
প্রতিশ্রুতি < অনুমতি >
ক্রোম ৯৬+
remove()
chrome.permissions.remove(
permissions: Permissions,
): Promise<boolean>
নির্দিষ্ট অনুমতিগুলিতে প্রবেশাধিকার অপসারণ করে। অনুমতিগুলি অপসারণ করতে কোনো সমস্যা হলে, প্রমিসটি প্রত্যাখ্যাত হবে।
প্যারামিটার
- অনুমতি
ফেরত
প্রতিশ্রুতি<বুলিয়ান>
ক্রোম ৯৬+
removeHostAccessRequest()
chrome.permissions.removeHostAccessRequest(
request: object,
): Promise<void>
যদি কোনো হোস্ট অ্যাক্সেস অনুরোধ বিদ্যমান থাকে, তবে তা মুছে ফেলে।
প্যারামিটার
- অনুরোধ
বস্তু
- ডকুমেন্ট আইডি
স্ট্রিং ঐচ্ছিক
যে ডকুমেন্ট থেকে হোস্ট অ্যাক্সেসের অনুরোধটি সরানো হবে, তার আইডি। এটি অবশ্যই একটি ট্যাবের মধ্যে থাকা শীর্ষ-স্তরের ডকুমেন্ট হতে হবে। এটি অথবা
tabIdঅবশ্যই উল্লেখ করতে হবে। - প্যাটার্ন
স্ট্রিং ঐচ্ছিক
যে ইউআরএল প্যাটার্ন থেকে হোস্ট অ্যাক্সেসের অনুরোধটি মুছে ফেলা হবে। যদি এটি প্রদান করা হয়, তবে এটি অবশ্যই একটি বিদ্যমান হোস্ট অ্যাক্সেস অনুরোধের প্যাটার্নের সাথে হুবহু মিলতে হবে।
- ট্যাবআইডি
সংখ্যা ঐচ্ছিক
যে ট্যাব থেকে হোস্ট অ্যাক্সেসের অনুরোধটি সরানো হবে, তার আইডি। এটি অথবা
documentIdঅবশ্যই উল্লেখ করতে হবে।
ফেরত
প্রতিশ্রুতি<শূন্য>
request()
chrome.permissions.request(
permissions: Permissions,
): Promise<boolean>
নির্দিষ্ট অনুমতিগুলির জন্য অ্যাক্সেসের অনুরোধ করা হয় এবং প্রয়োজনে ব্যবহারকারীকে একটি প্রম্পট দেখানো হয়। এই অনুমতিগুলি অবশ্যই ম্যানিফেস্টের optional_permissions ফিল্ডে সংজ্ঞায়িত থাকতে হবে অথবা ব্যবহারকারী কর্তৃক প্রদত্ত প্রয়োজনীয় অনুমতি হতে হবে। অরিজিন প্যাটার্নের পাথ উপেক্ষা করা হবে। আপনি ঐচ্ছিক অরিজিন অনুমতিগুলির উপসেটের জন্য অনুরোধ করতে পারেন; উদাহরণস্বরূপ, যদি আপনি ম্যানিফেস্টের optional_permissions ' বিভাগে *://*\/* উল্লেখ করেন, তাহলে আপনি http://example.com/ জন্য অনুরোধ করতে পারেন। অনুমতিগুলির জন্য অনুরোধ করতে কোনো সমস্যা হলে, প্রমিসটি বাতিল হয়ে যাবে।
প্যারামিটার
- অনুমতি
ফেরত
প্রতিশ্রুতি<বুলিয়ান>
ক্রোম ৯৬+
ইভেন্টগুলি
onAdded
chrome.permissions.onAdded.addListener(
callback: function,
)
এক্সটেনশনটি নতুন অনুমতি অর্জন করলে এটি সক্রিয় হয়।
প্যারামিটার
- কলব্যাক
ফাংশন
callbackপ্যারামিটারটি দেখতে এইরকম:(permissions: Permissions) => void
- অনুমতি
onRemoved
chrome.permissions.onRemoved.addListener(
callback: function,
)
এক্সটেনশন থেকে অনুমতি ব্যবহারের সুযোগ সরিয়ে নেওয়া হলে এটি কার্যকর হয়।
প্যারামিটার
- কলব্যাক
ফাংশন
callbackপ্যারামিটারটি দেখতে এইরকম:(permissions: Permissions) => void
- অনুমতি