chrome.permissions

توضیحات

از API chrome.permissions برای درخواست مجوزهای اختیاری اعلام‌شده در زمان اجرا به جای زمان نصب استفاده کنید، تا کاربران دلیل نیاز به مجوزها را درک کرده و فقط مجوزهای ضروری را اعطا کنند.

مفاهیم و کاربردها

هشدارهای مجوز برای توصیف قابلیت‌های اعطا شده توسط یک API وجود دارند، اما برخی از این هشدارها ممکن است واضح نباشند. API مجوزها به توسعه‌دهندگان اجازه می‌دهد تا هشدارهای مجوز را توضیح دهند و ویژگی‌های جدید را به تدریج معرفی کنند که به کاربران یک معرفی بدون ریسک از افزونه می‌دهد. به این ترتیب، کاربران می‌توانند مشخص کنند که چه میزان دسترسی مایل به اعطای مجوز هستند و کدام ویژگی‌ها را می‌خواهند فعال کنند.

برای مثال، قابلیت اصلی افزونه‌ی مجوزهای اختیاری، لغو صفحه‌ی تب جدید است. یکی از ویژگی‌ها، نمایش هدف کاربر در طول روز است. این ویژگی فقط به مجوز ذخیره‌سازی نیاز دارد که شامل هشدار نمی‌شود. این افزونه یک ویژگی اضافی دارد که کاربران می‌توانند با کلیک روی دکمه‌ی زیر آن را فعال کنند:

یک دکمه افزونه که ویژگی‌های اضافی را فعال می‌کند.
یک دکمه افزونه که ویژگی‌های اضافی را فعال می‌کند.

نمایش سایت‌های برتر کاربر نیاز به مجوز topSites دارد که اخطار زیر را دارد.

هشدار افزونه برای API سایت‌های برتر.
هشدار افزونه برای API topSites

پیاده‌سازی مجوزهای اختیاری

مرحله ۱: تصمیم بگیرید کدام مجوزها الزامی و کدام‌ها اختیاری هستند

یک افزونه می‌تواند مجوزهای اجباری و اختیاری را تعریف کند. به طور کلی، شما باید:

  • از مجوزهای الزامی در مواقعی که برای عملکرد اولیه افزونه شما مورد نیاز هستند، استفاده کنید.
  • در صورت نیاز به مجوزهای اختیاری برای ویژگی‌های اختیاری در افزونه خود، از آنها استفاده کنید.

مزایای مجوزهای مورد نیاز :

  • درخواست‌های کمتر: یک افزونه می‌تواند یک بار از کاربر بخواهد که همه مجوزها را بپذیرد.
  • توسعه ساده‌تر: مجوزهای لازم تضمین شده است.

مزایای مجوزهای اختیاری :

  • امنیت بهتر: افزونه‌ها با مجوزهای کمتری اجرا می‌شوند، زیرا کاربران فقط مجوزهای مورد نیاز را فعال می‌کنند.
  • اطلاعات بهتر برای کاربران: یک افزونه می‌تواند توضیح دهد که چرا وقتی کاربر ویژگی مربوطه را فعال می‌کند، به مجوز خاصی نیاز دارد.
  • ارتقاء آسان‌تر: وقتی افزونه خود را ارتقا می‌دهید، اگر ارتقاء مجوزهای اختیاری به جای مجوزهای الزامی اضافه کند، کروم آن را برای کاربران شما غیرفعال نمی‌کند.

مرحله ۲: مجوزهای اختیاری را در مانیفست اعلام کنید

مجوزهای اختیاری را در مانیفست افزونه خود با کلید optional_permissions و با استفاده از همان قالب فیلد مجوزها اعلام کنید:

{
  "name": "My extension",
  ...
  "optional_permissions": ["tabs"],
  "optional_host_permissions": ["https://www.google.com/"],
  ...
}

اگر می‌خواهید میزبان‌هایی را درخواست کنید که فقط در زمان اجرا کشف می‌کنید، "https://*/*" را در فیلد optional_host_permissions افزونه خود وارد کنید. این به شما امکان می‌دهد هر مبدأیی را در "Permissions.origins" مشخص کنید، البته تا زمانی که طرح تطبیق داشته باشد.

مجوزهایی که نمی‌توان آنها را به عنوان اختیاری مشخص کرد

بیشتر مجوزهای افزونه‌های کروم را می‌توان به صورت اختیاری مشخص کرد، به جز موارد استثنای زیر.

اجازه توضیحات
"debugger" رابط برنامه‌نویسی کاربردی chrome.debugger به عنوان یک انتقال جایگزین برای پروتکل اشکال‌زدایی از راه دور کروم عمل می‌کند.
"declarativeNetRequest" به افزونه دسترسی به API مربوط به chrome.declarativeNetRequest را اعطا می‌کند.
"devtools" به افزونه اجازه می‌دهد تا قابلیت‌های Chrome DevTools را گسترش دهد.
"geolocation" به افزونه اجازه می‌دهد از API موقعیت جغرافیایی HTML5 استفاده کند.
"mdns" به افزونه دسترسی به API مربوط به chrome.mdns را اعطا می‌کند.
"proxy" به افزونه دسترسی به API مربوط به chrome.proxy را برای مدیریت تنظیمات پروکسی کروم اعطا می‌کند.
"tts" رابط برنامه‌نویسی کاربردی chrome.tts، تبدیل متن به گفتار (TTS) را به صورت ترکیبی پخش می‌کند.
"ttsEngine" رابط برنامه‌نویسی کاربردی chrome.ttsEngine با استفاده از یک افزونه، یک موتور تبدیل متن به گفتار (TTS) پیاده‌سازی می‌کند.
"wallpaper" فقط ChromeOS . از API مربوط به chrome.wallpaper برای تغییر تصویر زمینه ChromeOS استفاده کنید.

برای اطلاعات بیشتر در مورد مجوزهای موجود و هشدارهای آنها، به بخش «اعلان مجوزها» مراجعه کنید.

مرحله ۳: درخواست مجوزهای اختیاری

با استفاده از 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();
    }
  });
});

اگر اضافه کردن مجوزها منجر به پیام‌های هشداری متفاوت از آنچه کاربر قبلاً دیده و پذیرفته است، شود، کروم به کاربر اطلاع می‌دهد. برای مثال، کد قبلی ممکن است منجر به پیامی مانند این شود:

یک نمونه درخواست تأیید مجوز.
یک نمونه درخواست تأیید مجوز.

مرحله ۴: مجوزهای فعلی افزونه را بررسی کنید

برای بررسی اینکه آیا افزونه شما مجوز خاص یا مجموعه‌ای از مجوزها را دارد، 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()

کروم ۱۳۳+ نسخه MV3+
chrome.permissions.addHostAccessRequest(
  request: object,
)
: Promise<void>

یک درخواست دسترسی به میزبان اضافه می‌کند. درخواست فقط در صورتی به کاربر ارسال می‌شود که افزونه بتواند در درخواست به میزبان دسترسی داشته باشد. درخواست در پیمایش بین مبداها بازنشانی می‌شود. پس از پذیرش، دسترسی مداوم به مبدا بالای سایت را اعطا می‌کند.

پارامترها

  • درخواست

    شیء

    • شناسه سند

      رشته اختیاری

      شناسه سندی که درخواست‌های دسترسی میزبان در آن نمایش داده می‌شوند. باید سند سطح بالا در یک تب باشد. در صورت ارائه، درخواست در تب سند مشخص شده نمایش داده می‌شود و هنگامی که سند به مبدا جدیدی هدایت می‌شود، حذف می‌شود. افزودن یک درخواست جدید، هرگونه درخواست موجود برای tabId را لغو می‌کند. این یا tabId باید مشخص شود.

    • الگو

      رشته اختیاری

      الگوی URL که درخواست‌های دسترسی به میزبان در آن نمایش داده می‌شوند. در صورت ارائه، درخواست‌های دسترسی به میزبان فقط در URLهایی نمایش داده می‌شوند که با این الگو مطابقت داشته باشند.

    • شناسه برگه

      شماره اختیاری

      شناسه‌ی برگه‌ای که درخواست‌های دسترسی میزبان در آن نمایش داده می‌شوند. در صورت ارائه، درخواست در برگه‌ی مشخص‌شده نمایش داده می‌شود و هنگامی که برگه به ​​مبدأ جدیدی هدایت می‌شود، حذف می‌شود. افزودن یک درخواست جدید، درخواست موجود برای documentId را لغو می‌کند. این یا documentId باید مشخص شوند.

بازگشت‌ها

  • قول<void>

contains()

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

بررسی می‌کند که آیا افزونه مجوزهای مشخص شده را دارد یا خیر.

پارامترها

بازگشت‌ها

  • قول <boolean>

    کروم ۹۶+

getAll()

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

مجموعه مجوزهای فعلی افزونه را دریافت می‌کند.

بازگشت‌ها

remove()

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

دسترسی به مجوزهای مشخص شده را حذف می‌کند. اگر در حذف مجوزها مشکلی وجود داشته باشد، promise رد خواهد شد.

پارامترها

بازگشت‌ها

  • قول <boolean>

    کروم ۹۶+

removeHostAccessRequest()

کروم ۱۳۳+ نسخه MV3+
chrome.permissions.removeHostAccessRequest(
  request: object,
)
: Promise<void>

در صورت وجود، درخواست دسترسی به میزبان را حذف می‌کند.

پارامترها

  • درخواست

    شیء

    • شناسه سند

      رشته اختیاری

      شناسه سندی که درخواست دسترسی میزبان از آن حذف خواهد شد. باید بالاترین سطح سند درون یک تب باشد. این یا tabId باید مشخص شود.

    • الگو

      رشته اختیاری

      الگوی URL که درخواست دسترسی میزبان از آن حذف خواهد شد. در صورت ارائه، این الگو باید دقیقاً با الگوی درخواست دسترسی میزبان موجود مطابقت داشته باشد.

    • شناسه برگه

      شماره اختیاری

      شناسه‌ی برگه‌ای که درخواست دسترسی میزبان از آن حذف خواهد شد. این یا documentId باید مشخص شود.

بازگشت‌ها

  • قول<void>

request()

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

درخواست دسترسی به مجوزهای مشخص‌شده را می‌دهد و در صورت لزوم، پیامی را به کاربر نمایش می‌دهد. این مجوزها یا باید در فیلد optional_permissions مانیفست تعریف شوند یا مجوزهای الزامی باشند که توسط کاربر مسدود شده‌اند. مسیرهای روی الگوهای مبدا نادیده گرفته می‌شوند. می‌توانید زیرمجموعه‌هایی از مجوزهای اختیاری مبدا را درخواست کنید؛ برای مثال، اگر *://*\/* را در بخش optional_permissions مانیفست مشخص کنید، می‌توانید http://example.com/ درخواست کنید. اگر در درخواست مجوزها مشکلی وجود داشته باشد، promise رد خواهد شد.

پارامترها

بازگشت‌ها

  • قول <boolean>

    کروم ۹۶+

رویدادها

onAdded

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

وقتی افزونه مجوزهای جدیدی دریافت می‌کند، اجرا می‌شود.

پارامترها

  • تماس برگشتی

    تابع

    پارامتر callback به شکل زیر است:

    (permissions: Permissions) => void

onRemoved

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

زمانی اجرا می‌شود که دسترسی به مجوزها از افزونه حذف شده باشد.

پارامترها

  • تماس برگشتی

    تابع

    پارامتر callback به شکل زیر است:

    (permissions: Permissions) => void