browser.permissions

বিবরণ

ইনস্টল করার সময়ের পরিবর্তে রান টাইমে ঘোষিত ঐচ্ছিক অনুমতির অনুরোধ করতে chrome.permissions API ব্যবহার করুন, যাতে ব্যবহারকারীরা বুঝতে পারেন যে কেন অনুমতি প্রয়োজন এবং শুধুমাত্র প্রয়োজনীয় অনুমতি প্রদান করেন।

ধারণা ও ব্যবহার

API-এর মাধ্যমে মঞ্জুর করা ক্ষমতার বিবরণ দিতে অনুমতি সংক্রান্ত সতর্কতা দেখানো হয়, তবে এর মধ্যে কিছু সতর্কতা স্পষ্ট নাও হতে পারে। অনুমতি API ডেভেলপারদের অনুমতি সংক্রান্ত সতর্কতা ব্যাখ্যা করতে এবং ধীরে ধীরে নতুন ফিচার চালু করতে দেয় যা ব্যবহারকারীদের এক্সটেনশনের সাথে ঝুঁকি-মুক্ত পরিচয় প্রদান করে। এইভাবে, ব্যবহারকারীরা কতটা অ্যাক্সেস দিতে ইচ্ছুক এবং কোন কোন ফিচার চালু করতে চান তা নির্দিষ্ট করতে পারবেন।

যেমন, ঐচ্ছিক অনুমতি এক্সটেনশনের মূল কার্যকারিতা নতুন ট্যাব পৃষ্ঠাকে ওভাররাইড করছে। একটি ফিচার ব্যবহারকারীর দিনের লক্ষ্য দেখাচ্ছে। এই ফিচারের জন্য শুধুমাত্র স্টোরেজ সংক্রান্ত অনুমতি প্রয়োজন, যার মধ্যে কোনও সতর্কতা অন্তর্ভুক্ত থাকে না। এক্সটেনশনে একটি অতিরিক্ত ফিচার আছে, যা ব্যবহারকারীরা নিম্নলিখিত বোতামে ক্লিক করে চালু করতে পারেন:

একটি এক্সটেনশন বোতাম যা অতিরিক্ত ফিচার চালু করে।
একটি এক্সটেনশন বোতাম যা অতিরিক্ত ফিচার চালু করে।

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

topSites API-এর জন্য এক্সটেনশন সংক্রান্ত সতর্কতা।
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" browser.debugger API, Chrome-এর রিমোট ডিবাগিং প্রোটোকল-এর জন্য বিকল্প ট্রান্সপোর্ট হিসেবে কাজ করে।
"declarativeNetRequest" এক্সটেনশনকে browser.declarativeNetRequest API অ্যাক্সেস করার অনুমতি দেয়।
"devtools" এক্সটেনশনকে Chrome DevTools-এর কার্যকারিতা বাড়ানোর অনুমতি দেয়।
"geolocation" এক্সটেনশনকে HTML5 জিওলোকেশন API ব্যবহার করার অনুমতি দেয়।
"mdns" এক্সটেনশনকে browser.mdns API অ্যাক্সেস করার অনুমতি দেয়।
"proxy" Chrome-এর প্রক্সি সেটিংস ম্যানেজ করার জন্য এক্সটেনশনকে browser.proxy API-তে অ্যাক্সেস দেয়।
"tts" browser.tts API সিন্থেসাইজড টেক্সট-টু-স্পিচ (TTS) চালায়।
"ttsEngine" browser.ttsEngine API এক্সটেনশন ব্যবহার করে টেক্সট-টু-স্পিচ (TTS) ইঞ্জিন প্রয়োগ করে।
"wallpaper" শুধুমাত্র ChromeOS। ChromeOS ওয়ালপেপার পরিবর্তন করতে browser.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.
  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

প্রপার্টি

  • উৎস

    string[] ঐচ্ছিক

    হোস্ট অনুমতির তালিকা, যার মধ্যে ম্যানিফেস্টে optional_permissions বা permissions কীতে নির্দিষ্ট করা এবং কন্টেন্ট স্ক্রিপ্ট-এর সাথে সম্পর্কিত অনুমতি অন্তর্ভুক্ত।

  • অনুমতি

    string[] ঐচ্ছিক

    নামযুক্ত অনুমতির তালিকা (হোস্ট বা উৎস অন্তর্ভুক্ত করে না)।

পদ্ধতি

addHostAccessRequest()

Chrome 133+ Chrome 148 থেকে browser.* MV3+
browser.permissions.addHostAccessRequest(
  request: object,
)
: Promise<void>

হোস্ট অ্যাক্সেসের অনুরোধ যোগ করে। অনুরোধে হোস্টকে এক্সটেনশন অ্যাক্সেস দেওয়া হলে তবেই ব্যবহারকারীকে অনুরোধের সিগন্যাল পাঠানো হবে। ক্রস-অরিজিন নেভিগেশনে অনুরোধ রিসেট করা হবে। অনুমতি দিলে, সাইটের টপ অরিজিনে স্থায়ী অ্যাক্সেস প্রদান করে

প্যারামিটারগুলি

  • অনুরোধ

    অবজেক্ট

    • documentId

      স্ট্রিং ঐচ্ছিক

      ডকুমেন্টের আইডি যেখানে হোস্ট অ্যাক্সেসের অনুরোধ দেখানো যেতে পারে। ট্যাবের মধ্যে টপ-লেভেল ডকুমেন্ট হতে হবে। প্রদান করা হলে, নির্দিষ্ট ডকুমেন্টের ট্যাবে অনুরোধ দেখানো হয় এবং ডকুমেন্ট নতুন অরিজিনে নেভিগেট করলে সরিয়ে দেওয়া হয়। নতুন অনুরোধ যোগ করলে, tabId-এর জন্য আগে থেকে থাকা যেকোনও অনুরোধ ওভাররাইড হয়ে যাবে। এটি বা tabId অবশ্যই উল্লেখ করতে হবে।

    • প্যাটার্ন

      স্ট্রিং ঐচ্ছিক

      URL প্যাটার্ন যেখানে হোস্ট অ্যাক্সেসের অনুরোধ দেখানো যেতে পারে। প্রদান করা হলে, হোস্ট অ্যাক্সেসের অনুরোধ শুধুমাত্র এই প্যাটার্নের সাথে মেলে এমন URL-এ দেখানো হবে।

    • tabId

      নম্বর ঐচ্ছিক

      যে ট্যাবে হোস্ট অ্যাক্সেসের অনুরোধ দেখানো যেতে পারে সেটির আইডি। প্রদান করা হলে, অনুরোধটি নির্দিষ্ট ট্যাবে দেখানো হয় এবং ট্যাবটি নতুন অরিজিনে নেভিগেট করলে সরানো হয়। নতুন অনুরোধ যোগ করলে, documentId-এর জন্য আগে থেকে থাকা অনুরোধ ওভাররাইড হয়ে যাবে। এটি বা documentId নির্দিষ্ট করতে হবে।

রিটার্ন

  • <void> প্রমিস

contains()

browser.permissions.contains(
  permissions: Permissions,
)
: Promise<boolean>

এক্সটেনশনের নির্দিষ্ট অনুমতি আছে কিনা তা চেক করে।

প্যারামিটারগুলি

রিটার্ন

  • Promise<boolean>

    Chrome 96+ Chrome 148 থেকে browser.*

getAll()

browser.permissions.getAll(): Promise<Permissions>

এক্সটেনশনের বর্তমান অনুমতির সেট পায়।

রিটার্ন

remove()

browser.permissions.remove(
  permissions: Permissions,
)
: Promise<boolean>

নির্দিষ্ট করা অনুমতির অ্যাক্সেস সরিয়ে দেয়। অনুমতি সরানোর ক্ষেত্রে কোনও সমস্যা হলে, প্রমিস বাতিল করা হবে।

প্যারামিটারগুলি

রিটার্ন

  • Promise<boolean>

    Chrome 96+ Chrome 148 থেকে browser.*

removeHostAccessRequest()

Chrome 133+ Chrome 148 থেকে browser.* MV3+
browser.permissions.removeHostAccessRequest(
  request: object,
)
: Promise<void>

হোস্ট অ্যাক্সেসের অনুরোধ থাকলে তা সরিয়ে দেয়।

প্যারামিটারগুলি

  • অনুরোধ

    অবজেক্ট

    • documentId

      স্ট্রিং ঐচ্ছিক

      ডকুমেন্টের আইডি যেখানে হোস্ট অ্যাক্সেসের অনুরোধ সরানো হবে। ট্যাবের মধ্যে টপ-লেভেল ডকুমেন্ট হতে হবে। এটি বা tabId অবশ্যই উল্লেখ করতে হবে।

    • প্যাটার্ন

      স্ট্রিং ঐচ্ছিক

      URL প্যাটার্ন যেখানে হোস্ট অ্যাক্সেসের অনুরোধ সরানো হবে। প্রদান করা হলে, এটি অবশ্যই আগে থেকে থাকা হোস্ট অ্যাক্সেস অনুরোধের প্যাটার্নের সাথে হুবহু মিলতে হবে।

    • tabId

      নম্বর ঐচ্ছিক

      হোস্ট অ্যাক্সেসের অনুরোধ সরানো হবে এমন ট্যাবের আইডি। এটি বা documentId নির্দিষ্ট করতে হবে।

রিটার্ন

  • <void> প্রমিস

request()

browser.permissions.request(
  permissions: Permissions,
)
: Promise<boolean>

নির্দিষ্ট অনুমতির জন্য অ্যাক্সেসের অনুরোধ করে, প্রয়োজনে ব্যবহারকারীকে একটি প্রম্পট দেখায়। এইসব অনুমতি ম্যানিফেস্টের optional_permissions ফিল্ডে উল্লেখ করা থাকতে হবে অথবা ব্যবহারকারী যেসব প্রয়োজনীয় অনুমতি দেননি সেগুলি হতে হবে। অরিজিন প্যাটার্নের পাথ এড়িয়ে যাওয়া হবে। আপনি ঐচ্ছিক অরিজিন অনুমতির সাবসেটের জন্য অনুরোধ করতে পারেন; যেমন, আপনি ম্যানিফেস্টের optional_permissions বিভাগে *://*\/* উল্লেখ করলে, http://example.com/-এর জন্য অনুরোধ করতে পারবেন। অনুমতির অনুরোধ করার ক্ষেত্রে কোনও সমস্যা হলে, প্রমিস বাতিল করা হবে।

প্যারামিটারগুলি

রিটার্ন

  • Promise<boolean>

    Chrome 96+ Chrome 148 থেকে browser.*

ইভেন্ট

onAdded

browser.permissions.onAdded.addListener(
  callback: function,
)

এক্সটেনশন নতুন অনুমতি পেলে ফায়ার করা হয়।

প্যারামিটারগুলি

  • কলব্যাক

    ফাংশন

    callback প্যারামিটারটি দেখতে এইরকম:

    (permissions: Permissions) => void

onRemoved

browser.permissions.onRemoved.addListener(
  callback: function,
)

এক্সটেনশন থেকে অনুমতির অ্যাক্সেস সরিয়ে দেওয়া হলে ফায়ার করা হয়।

প্যারামিটারগুলি

  • কলব্যাক

    ফাংশন

    callback প্যারামিটারটি দেখতে এইরকম:

    (permissions: Permissions) => void