"activeTab» اجازه

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

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

بدون "activeTab" :

بدون activeTab

با "activeTab" :

با activeTab

دسترسی به صفحات محدود شده، مانند صفحات chrome:// مجاز نیست.

مثال

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

مانیفست.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
}

کارگر خدماتی:

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

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

انگیزه

یک افزونه‌ی برش وب را در نظر بگیرید که یک اکشن و یک آیتم منوی زمینه دارد. این افزونه ممکن است فقط زمانی که اکشن آن کلیک می‌شود یا آیتم منوی زمینه‌اش اجرا می‌شود، نیاز به دسترسی به تب‌ها داشته باشد.

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

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

«activeTab» چه امکاناتی را فراهم می‌کند؟

در حالی که مجوز "activeTab" برای یک تب فعال است، یک افزونه می‌تواند:

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

فراخوانی activeTab

حرکات کاربر زیر مجوز "activeTab" را فعال می‌کنند: