هنگامی که کاربر برنامه افزودنی را فراخوانی می کند ، مجوز "activeTab"
به یک برنامه افزودنی دسترسی موقت به برگه فعال فعلی می دهد - برای مثال با کلیک بر روی عملکرد آن. دسترسی به برگه تا زمانی که کاربر در آن صفحه است ادامه مییابد و زمانی که کاربر برگه را دور میزند یا میبندد لغو میشود. برای مثال، اگر کاربر افزونه را در https://example.com فراخوانی کند و سپس به https://example.com/foo هدایت شود، برنامه افزودنی همچنان به صفحه دسترسی خواهد داشت. اگر کاربر به https://chromium.org هدایت شود، دسترسی لغو می شود.
این به عنوان جایگزینی برای بسیاری از استفادههای "<all_urls>"
عمل میکند، اما هیچ پیام هشداری را در حین نصب نمایش نمیدهد:
بدون "activeTab"
:
با "activeTab"
:
مثال
پسوند نمونه 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
}
کارگر خدمات:
function reddenPage() {
document.body.style.backgroundColor = 'red';
}
chrome.action.onClicked.addListener((tab) => {
if (!tab.url.includes('chrome://')) {
chrome.scripting.executeScript({
target: { tabId: tab.id },
func: reddenPage
});
}
});
انگیزه
یک برنامه افزودنی برش وب را در نظر بگیرید که دارای یک کنش و یک مورد منوی زمینه است . این برنامه افزودنی ممکن است تنها زمانی نیاز به دسترسی به برگهها داشته باشد که روی عملکرد آن کلیک میشود، یا زمانی که آیتم منوی زمینه آن اجرا میشود.
بدون "activeTab"
، این افزونه باید درخواست دسترسی کامل و دائمی به هر وبسایتی را داشته باشد، فقط برای اینکه اگر کاربر از آن فراخوانی کرد، بتواند کار خود را انجام دهد. این قدرت زیادی برای سپردن به چنین پسوند ساده ای است. و اگر برنامه افزودنی به خطر بیفتد، مهاجم به همه چیزهایی که برنامه افزودنی داشت دسترسی پیدا می کند.
در مقابل، یک برنامه افزودنی با مجوز "activeTab"
فقط در پاسخ به یک حرکت صریح کاربر به یک برگه دسترسی پیدا می کند. اگر برنامه افزودنی به خطر بیفتد، مهاجم باید منتظر بماند تا کاربر قبل از دسترسی به برنامه افزودنی را فراخوانی کند. و این دسترسی فقط تا زمانی که برگه پیمایش یا بسته شود ادامه دارد.
آنچه "activeTab" اجازه می دهد
در حالی که مجوز "activeTab"
برای یک برگه فعال است، یک برنامه افزودنی می تواند:
- در صورتی که مجوز
"scripting"
نیز اعلام شده باشد (مانند مثال بالا )scripting.insertCSS()
یاscripting.executeScript()
را در آن برگه فراخوانی کنید. - نشانی وب، عنوان و فاویکون آن برگه را از طریق API دریافت کنید که یک شیء
tabs.Tab
را برمی گرداند (در اصل،"activeTab"
به طور موقت مجوز میزبان را می دهد). - با استفاده از webRequest API، درخواستهای شبکه را در برگه به مبدا فریم اصلی برگه رهگیری کنید. برنامه افزودنی به طور موقت مجوزهای میزبان را برای مبدا قاب اصلی برگه دریافت می کند.
فراخوانی activeTab
حرکات کاربر زیر مجوز "activeTab"
را فعال می کند:
- اجرای یک عمل
- اجرای یک آیتم منوی زمینه
- اجرای میانبر صفحه کلید از دستورات API
- پذیرش پیشنهاد از omnibox API