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

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

topSites API-এর জন্য একটি এক্সটেনশন সতর্কতা ঐচ্ছিক অনুমতি বাস্তবায়ন করুন
ধাপ ১: কোন অনুমতি প্রয়োজন এবং কোনটি ঐচ্ছিক তা নির্ধারণ করুন
একটি এক্সটেনশন প্রয়োজনীয় এবং ঐচ্ছিক উভয় অনুমতিই ঘোষণা করতে পারে। সাধারণভাবে, আপনার উচিত:
- আপনার এক্সটেনশনের মৌলিক কার্যকারিতার জন্য প্রয়োজনীয় অনুমতিগুলি ব্যবহার করুন।
- আপনার এক্সটেনশনের ঐচ্ছিক বৈশিষ্ট্যগুলির জন্য যখন ঐচ্ছিক অনুমতিগুলির প্রয়োজন হয় তখন সেগুলি ব্যবহার করুন।
প্রয়োজনীয় অনুমতির সুবিধা:
- কম প্রম্পট: একটি এক্সটেনশন ব্যবহারকারীকে একবারই সমস্ত অনুমতি গ্রহণ করতে অনুরোধ করতে পারে।
- সহজতর উন্নয়ন: প্রয়োজনীয় অনুমতি নিশ্চিতভাবে উপস্থিত থাকবে।
ঐচ্ছিক অনুমতির সুবিধা:
- উন্নত নিরাপত্তা: এক্সটেনশনগুলি কম অনুমতিতে চলে কারণ ব্যবহারকারীরা কেবল প্রয়োজনীয় অনুমতিগুলিই সক্ষম করে।
- ব্যবহারকারীদের জন্য আরও ভালো তথ্য: একটি এক্সটেনশন ব্যাখ্যা করতে পারে যে ব্যবহারকারী যখন প্রাসঙ্গিক বৈশিষ্ট্যটি সক্ষম করে তখন কেন একটি নির্দিষ্ট অনুমতির প্রয়োজন হয়।
- সহজ আপগ্রেড: যখন আপনি আপনার এক্সটেনশন আপগ্রেড করেন, তখন আপগ্রেডটি প্রয়োজনীয় অনুমতির পরিবর্তে ঐচ্ছিক অনুমতি যোগ করলে Chrome আপনার ব্যবহারকারীদের জন্য এটি অক্ষম করবে না।
ধাপ ২: ম্যানিফেস্টে ঐচ্ছিক অনুমতি ঘোষণা করুন
optional_permissions কী ব্যবহার করে আপনার এক্সটেনশন ম্যানিফেস্টে ঐচ্ছিক অনুমতি ঘোষণা করুন, অনুমতি ক্ষেত্রের মতো একই ফর্ম্যাট ব্যবহার করে:
{
"name": "My extension",
...
"optional_permissions": ["tabs"],
"optional_host_permissions": ["https://www.google.com/"],
...
}
যদি আপনি এমন হোস্টের অনুরোধ করতে চান যা আপনি কেবল রানটাইমে আবিষ্কার করেন, তাহলে আপনার এক্সটেনশনের optional_host_permissions ফিল্ডে "https://*/*" অন্তর্ভুক্ত করুন। এটি আপনাকে "Permissions.origins" এ যেকোনো অরিজিন নির্দিষ্ট করতে দেয় যতক্ষণ না এর একটি মিলযুক্ত স্কিম থাকে।
ঐচ্ছিক হিসাবে নির্দিষ্ট করা যাবে না এমন অনুমতি
নিম্নলিখিত ব্যতিক্রমগুলি ছাড়া, বেশিরভাগ Chrome এক্সটেনশন অনুমতি ঐচ্ছিক হিসাবে নির্দিষ্ট করা যেতে পারে।
| অনুমতি | বিবরণ |
|---|---|
"debugger" | chrome.debugger API Chrome এর রিমোট ডিবাগিং প্রোটোকলের জন্য একটি বিকল্প পরিবহন হিসেবে কাজ করে। |
"declarativeNetRequest" | এক্সটেনশনটিকে chrome.declarativeNetRequest API-তে অ্যাক্সেস দেয়। |
"devtools" | এক্সটেনশনকে Chrome DevTools কার্যকারিতা প্রসারিত করার অনুমতি দেয়। |
"geolocation" | এক্সটেনশনটিকে HTML5 জিওলোকেশন API ব্যবহার করার অনুমতি দেয়। |
"mdns" | এক্সটেনশনটিকে chrome.mdns API-তে অ্যাক্সেস দেয়। |
"proxy" | Chrome এর প্রক্সি সেটিংস পরিচালনা করার জন্য chrome.proxy API-তে এক্সটেনশন অ্যাক্সেস মঞ্জুর করে। |
"tts" | chrome.tts API সিন্থেসাইজড টেক্সট-টু-স্পিচ (TTS) চালায়। |
"ttsEngine" | chrome.ttsEngine API একটি এক্সটেনশন ব্যবহার করে একটি টেক্সট-টু-স্পিচ (TTS) ইঞ্জিন প্রয়োগ করে। |
"wallpaper" | শুধুমাত্র ChromeOS । ChromeOS ওয়ালপেপার পরিবর্তন করার জন্য chrome.wallpaper API ব্যবহার করুন। |
উপলব্ধ অনুমতি এবং তাদের সতর্কতা সম্পর্কে আরও তথ্যের জন্য অনুমতি ঘোষণা করুন দেখুন।
ধাপ ৩: ঐচ্ছিক অনুমতির অনুরোধ করুন
permissions.request() ব্যবহার করে ব্যবহারকারীর অঙ্গভঙ্গির মধ্যে থেকে অনুমতিগুলির অনুরোধ করুন:
document.querySelector('#my-button').addEventListener('click', (event) => {
// Permissions must be requested from inside a user gesture, like a button's
// click handler.
chrome.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() ব্যবহার করুন:
chrome.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() কল করার মাধ্যমে সাধারণত ব্যবহারকারীকে অনুরোধ না করেই অনুমতিটি আবার যোগ করা হয়।
chrome.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কীগুলিতে নির্দিষ্ট করা এবং Content Scripts এর সাথে সম্পর্কিত অনুমতিগুলি সহ। - অনুমতি
স্ট্রিং[] ঐচ্ছিক
নামযুক্ত অনুমতিগুলির তালিকা (হোস্ট বা অরিজিন অন্তর্ভুক্ত নয়)।
পদ্ধতি
addHostAccessRequest()
chrome.permissions.addHostAccessRequest(
request: object,
): Promise<void>
একটি হোস্ট অ্যাক্সেস অনুরোধ যোগ করে। অনুরোধটি কেবলমাত্র তখনই ব্যবহারকারীকে সিগন্যাল করা হবে যদি এক্সটেনশনটিকে অনুরোধে থাকা হোস্টে অ্যাক্সেস দেওয়া যায়। ক্রস-অরিজিন নেভিগেশনে অনুরোধটি রিসেট করা হবে। গৃহীত হলে, সাইটের শীর্ষ অরিজিনে স্থায়ী অ্যাক্সেস মঞ্জুর করে।
পরামিতি
- অনুরোধ
বস্তু
- ডকুমেন্ট আইডি
স্ট্রিং ঐচ্ছিক
একটি ডকুমেন্টের আইডি যেখানে হোস্ট অ্যাক্সেসের অনুরোধগুলি দেখানো যেতে পারে। এটি অবশ্যই একটি ট্যাবের মধ্যে শীর্ষ-স্তরের ডকুমেন্ট হতে হবে। যদি দেওয়া থাকে, তাহলে অনুরোধটি নির্দিষ্ট ডকুমেন্টের ট্যাবে প্রদর্শিত হবে এবং ডকুমেন্টটি নতুন অরিজিনে নেভিগেট করলে এটি সরানো হবে। একটি নতুন অনুরোধ যোগ করলে
tabIdএর জন্য বিদ্যমান যেকোনো অনুরোধ ওভাররাইড হবে। এটি বাtabIdঅবশ্যই নির্দিষ্ট করতে হবে। - প্যাটার্ন
স্ট্রিং ঐচ্ছিক
যে URL প্যাটার্নে হোস্ট অ্যাক্সেসের অনুরোধগুলি দেখানো যেতে পারে। যদি দেওয়া থাকে, তাহলে হোস্ট অ্যাক্সেসের অনুরোধগুলি কেবলমাত্র সেই URLগুলিতেই দেখানো হবে যেগুলি এই প্যাটার্নের সাথে মেলে।
- ট্যাবআইডি
সংখ্যা ঐচ্ছিক
ট্যাবের আইডি যেখানে হোস্ট অ্যাক্সেসের অনুরোধগুলি দেখানো যেতে পারে। যদি দেওয়া থাকে, তাহলে অনুরোধটি নির্দিষ্ট ট্যাবে দেখানো হবে এবং ট্যাবটি নতুন অরিজিনে নেভিগেট করলে এটি সরানো হবে। একটি নতুন অনুরোধ যোগ করলে
documentIdএর জন্য বিদ্যমান অনুরোধটি ওভাররাইড হবে। এটি বা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অবশ্যই নির্দিষ্ট করতে হবে। - প্যাটার্ন
স্ট্রিং ঐচ্ছিক
যে URL প্যাটার্ন থেকে হোস্ট অ্যাক্সেস অনুরোধ সরানো হবে। যদি দেওয়া থাকে, তাহলে এটি অবশ্যই বিদ্যমান হোস্ট অ্যাক্সেস অনুরোধের প্যাটার্নের সাথে হুবহু মিলবে।
- ট্যাবআইডি
সংখ্যা ঐচ্ছিক
যে ট্যাব থেকে হোস্ট অ্যাক্সেসের অনুরোধ সরানো হবে তার আইডি। এটি বা
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
- অনুমতি