當使用者叫用擴充功能 (例如點選其動作) 時,"activeTab" 權限會授予擴充功能目前使用中分頁的暫時存取權。使用者在該頁面時,可存取分頁,但離開或關閉分頁後,存取權就會撤銷。舉例來說,如果使用者在 https://example.com 叫用擴充功能,然後前往 https://example.com/foo,擴充功能仍可存取該網頁。如果使用者前往 https://chromium.org,系統會撤銷存取權。
這個選項可以做為 "<all_urls>" 的替代選項,但在安裝期間不會顯示警告訊息:
不含 "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"權限 (如上述範例),請在該分頁上呼叫scripting.insertCSS()或scripting.executeScript()。 - 透過傳回
tabs.Tab物件的 API,取得該分頁的網址、標題和網站圖示 (基本上,"activeTab"會暫時授予主機權限)。 - 使用 webRequest API,將分頁中的網路要求攔截到分頁的主頁框來源。擴充功能會暫時取得分頁主頁框來源的主機權限。
叫用 activeTab
下列使用者手勢可啟用 "activeTab" 權限:
- 執行動作
- 執行內容選單項目
- 透過 commands API 執行鍵盤快速鍵
- 接受 omnibox API 的建議