اجازه «activeTab»

اجازه "activeTab" به افزونه دسترسی موقت به برگه فعال فعلی می‌دهد وقتی که کاربر افزونه را فراخوانی می‌کند - برای مثال با کلیک کردن روی کنش آن. دسترسی به برگه تا زمانی که کاربر در آن صفحه باشد ادامه دارد و وقتی کاربر از آن صفحه خارج شود یا برگه را ببندد، لغو می‌شود. برای مثال، اگر کاربر افزونه را در https://example.com فراخوانی کند و سپس به https://example.com/foo برود، افزونه همچنان به صفحه دسترسی خواهد داشت. اگر کاربر به https://chromium.org پیمایش کند، دسترسی لغو می‌شود.

این گزینه جایگزینی برای بسیاری از کاربردهای "<all_urls>" است، اما هیچ پیام هشداری درطول نصب نمایش نمی‌دهد:

بدون "activeTab":

بدون activeTab

با "activeTab":

با activeTab

دسترسی به صفحه‌های محدودشده، مثل صفحه‌های chrome://، اعطا نمی‌شود.

مثال

افزونه نمونه Page Redder را ببینید:

manifest.json:

{
  "name": "Page Redder",
  "version": "2.0",
  "permissions": [
    "activeTab",
    "scripting"
  ],
  "background": {
    "service_worker": "service-worker.js"
  },
  "action": {
    "default_title": "Make this page red"
  },
  "manifest_version": 3
}

service-worker:

function reddenPage() {
  document.body.style.backgroundColor = 'red';
}

browser.action.onClicked.addListener((tab) => {
  // If the tab URL is not set, it is a restricted page.
  if (tab.url) {
    browser.scripting.executeScript({
      target: { tabId: tab.id },
      func: reddenPage
    });
  }
});

انگیزه

افزونه برش وب را درنظر بگیرید که دارای یک کنش و یک مورد منوِ بافت است. This extension may only really need to access tabs when its action is clicked, or when its context menu item is executed.

بدون "activeTab"، این افزونه باید درخواست دسترسی کامل و دائمی به همه وب‌سایت‌ها را داشته باشد، فقط برای اینکه بتواند کارش را انجام دهد اگر کاربر آن را فراخوانی کند. این قدرت زیادی است که به چنین افزونه ساده‌ای واگذار می‌شود. و اگر افزونه زمانی لو برود، مهاجم به هر چیزی که افزونه داشته است دسترسی پیدا می‌کند.

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

آنچه «activeTab» اجازه می‌دهد

وقتی اجازه "activeTab" برای برگه‌ای فعال باشد، افزونه می‌تواند:

  • اگر "scripting" اجازه نیز اعلام شده باشد (مانند مثال بالا)، scripting.insertCSS() یا scripting.executeScript() را در آن برگه فراخوانی کنید.
  • نشانی وب، عنوان، و نماد وب‌سایت آن برگه را ازطریق API که شیء tabs.Tab را برمی‌گرداند دریافت کند (اساساً، "activeTab" به‌طور موقت اجازه میزبان را اعطا می‌کند).
  • رهگیری درخواست‌های شبکه در برگه به مبدأ قاب اصلی برگه بااستفاده از میانای برنامه‌سازی کاربردی webRequest. افزونه به‌طور موقت اجازه‌های میزبان را برای مبدأ قاب اصلی برگه دریافت می‌کند.

درحال فراخوانی activeTab

اشاره‌های کاربر زیر اجازه "activeTab" را فعال می‌کند: