إذن "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
    });
  }
});

الحافز

لنفترض أنّ هناك إضافة لاقتصاص الويب تتضمّن إجراءً وعنصر قائمة سياق. قد تحتاج هذه الإضافة فقط إلى الوصول إلى علامات التبويب عند النقر على الإجراء الخاص بها، أو عند تنفيذ عنصر قائمة السياق الخاص بها.

بدون "activeTab"، ستحتاج هذه الإضافة إلى طلب إذن وصول كامل ودائم إلى كل موقع إلكتروني، وذلك فقط لتتمكّن من تنفيذ عملها إذا طلب منها المستخدم ذلك. هذه صلاحيات كثيرة تُمنح لإضافة بسيطة. وإذا تم اختراق الإضافة، سيتمكّن المهاجم من الوصول إلى كل ما كان متاحًا للإضافة.

في المقابل، لا تحصل الإضافة التي لديها إذن "activeTab" على إمكانية الوصول إلى علامة تبويب إلا استجابةً لإجراء تفاعلي صريح من المستخدم. إذا تم اختراق الإضافة، سيحتاج المهاجم إلى انتظار المستخدم لاستدعاء الإضافة قبل الحصول على إذن الوصول. ويستمر هذا الوصول فقط حتى يتم التنقل في علامة التبويب أو إغلاقها.

الإجراءات التي يسمح بها الإذن activeTab

عند تفعيل إذن "activeTab" لعلامة تبويب، يمكن للإضافة إجراء ما يلي:

  • يمكنك استدعاء scripting.insertCSS() أو scripting.executeScript() في علامة التبويب هذه إذا تم أيضًا الإعلان عن إذن "scripting" (كما هو موضّح في المثال أعلاه).
  • الحصول على عنوان URL والعنوان والرمز المفضل لعلامة التبويب هذه من خلال واجهة برمجة تطبيقات تعرض عنصر tabs.Tab (يمنح "activeTab" إذن المضيف بشكل مؤقت).
  • يمكنك اعتراض طلبات الشبكة في علامة التبويب إلى مصدر الإطار الرئيسي لعلامة التبويب باستخدام واجهة برمجة التطبيقات webRequest. تحصل الإضافة مؤقتًا على أذونات المضيف لمصدر الإطار الرئيسي لعلامة التبويب.

استدعاء activeTab

تتيح الإجراءات التفاعلية التالية من المستخدم منح الإذن "activeTab":