permissions

型別 Array
必填
Manifest 版本 2 或更高
示例
json
"permissions": [
  "webRequest"
]

使用 permissions 鍵來請求擴充套件的特殊許可權。此鍵是一個字串陣列,每個字串都表示一個許可權請求。

如果您使用此鍵請求許可權,則瀏覽器可能會在安裝時告知使用者擴充套件正在請求某些特權,並要求使用者確認他們是否願意授予這些特權。瀏覽器還可能允許使用者在安裝後檢查擴充套件的特權。由於授予特權的請求可能會影響使用者安裝擴充套件的意願,因此請求特權值得仔細考慮。例如,您應該避免請求不必要的許可權,並在擴充套件商店描述中提供有關請求許可權原因的資訊。有關應考慮的問題的更多資訊,請參閱文章 請求正確的許可權

有關如何測試和預覽許可權請求的資訊,請參閱擴充套件工作坊網站上的 測試許可權請求

此鍵可包含三種許可權

  • 主機許可權(僅限 Manifest V2;在 Manifest V3 或更高版本中,主機許可權在 host_permissions manifest 鍵中指定。)
  • API 許可權
  • activeTab 許可權

主機許可權

注意:如何請求主機許可權取決於您是在安裝時還是在執行時需要它們,以及您的擴充套件使用的是哪個 manifest 版本。

主機許可權指定為 匹配模式,每個模式標識一組 URL,擴充套件程式正在為這些 URL 請求額外的特權。例如,一個主機許可權可以是 "*://mdn.club.tw/*"

額外特權包括

  • XMLHttpRequestfetch 訪問這些源,無跨域限制(即使是從內容指令碼發出的請求)
  • 在不需要 "tabs" 許可權的情況下,讀取標籤頁特定元資料的能力,例如 tabs.Tab 物件的 urltitlefavIconUrl 屬性
  • 以程式設計方式將內容指令碼和樣式注入由這些源提供的頁面中的能力(請參閱 載入內容指令碼)。
  • 接收這些主機 webRequest API 事件的能力
  • 使用 cookies API 訪問該主機的 cookie 的能力,前提是同時包含 "cookies" API 許可權。
  • 繞過擴充套件頁面上的跟蹤保護,其中主機被指定為完整域名或萬用字元。但是,內容指令碼只能繞過指定為完整域名的主機的跟蹤保護。

在 Firefox 56 及更高版本中,擴充套件程式會自動獲得其自身 origin 的主機許可權,形式為

url
moz-extension://60a20a9b-1ad4-af49-9b6c-c64c98c37920/

其中 60a20a9b-1ad4-af49-9b6c-c64c98c37920 是擴充套件的內部 ID。擴充套件程式可以透過呼叫 extension.getURL() 以程式設計方式獲取此 URL

js
browser.extension.getURL("");
// moz-extension://60a20a9b-1ad4-af49-9b6c-c64c98c37920/

API 許可權

API 許可權指定為關鍵字,每個關鍵字都命名了擴充套件程式希望使用的 WebExtension API

這些許可權在 Manifest V2 及更高版本中可用,除非另有說明

  • activeTab
  • alarms
  • background
  • bookmarks
  • browserSettings
  • browsingData
  • captivePortal
  • clipboardRead
  • clipboardWrite
  • contentSettings
  • contextMenus
  • contextualIdentities
  • cookies
  • debugger
  • declarativeNetRequest
  • declarativeNetRequestFeedback
  • declarativeNetRequestWithHostAccess
  • devtools(當 devtools_page manifest 鍵存在時,此許可權會自動授予。)
  • dns
  • downloads
  • downloads.open
  • find
  • geolocation
  • history
  • identity
  • idle
  • management
  • menus
  • menus.overrideContext
  • nativeMessaging
  • notifications
  • pageCapture
  • pkcs11
  • privacy
  • proxy
  • scripting
  • search
  • sessions
  • storage
  • tabGroups
  • tabHide
  • tabs
  • theme
  • topSites
  • unlimitedStorage
  • 'userScripts'(請參閱 userScripts 許可權
  • webNavigation
  • webRequest
  • webRequestAuthProvider(Manifest V3 及更高版本)
  • webRequestBlocking
  • webRequestFilterResponse
  • webRequestFilterResponse.serviceWorkerScript

在大多數情況下,許可權僅授予對 API 的訪問權,但有以下例外

  • tabs 許可權允許您訪問 tabs API 的特權部分,而無需主機許可權Tab.urlTab.titleTab.faviconUrl

    • 在 Firefox 85 及更早版本中,如果您想在 tabs.query()queryInfo 引數中包含 url,也需要 tabs 許可權。其餘的 tabs API 可以在不請求任何許可權的情況下使用。
    • 從 Firefox 86 和 Chrome 50 開始,匹配的主機許可權也可以代替 "tabs" 許可權使用。
  • webRequestBlocking 許可權使您能夠使用 "blocking" 引數,從而可以修改和取消請求

  • downloads.open 許可權允許您使用 downloads.open() API。

  • tabHide 許可權允許您使用 tabs.hide() API。

activeTab 許可權

如果擴充套件程式擁有 "activeTab" 許可權,當用戶與擴充套件程式進行互動時,該擴充套件程式將僅為活動標籤頁授予額外的特權。

這些互動被稱為使用者操作,包括使用者

  • 點選擴充套件程式的工具欄按鈕頁面操作
  • 選擇擴充套件程式的上下文選單項。
  • 啟用擴充套件程式定義的鍵盤快捷鍵(從 Firefox 63 開始)。
  • 點選隨擴充套件程式捆綁的頁面上的按鈕。
  • 點選位址列(omnibox)中的擴充套件程式建議(從 Firefox 142 開始)。

額外特權包括

  • 以程式設計方式將 JavaScript 或 CSS 注入標籤頁的能力(請參閱 載入內容指令碼)。
  • 訪問當前標籤頁的特權標籤頁 API 部分:Tab.urlTab.titleTab.faviconUrl

此許可權的目的是使擴充套件程式能夠滿足常見的用例,而無需授予非常強大的許可權。許多擴充套件程式希望在使用者請求時“對當前頁面執行某些操作”。

例如,考慮一個擴充套件程式,它希望在使用者單擊瀏覽器操作時在當前頁面上執行指令碼。如果 activeTab 許可權不存在,該擴充套件程式將需要請求主機許可權 <all_urls>。但這賦予了擴充套件程式比它需要的更多的權力:它現在可以隨時隨地在任何標籤頁中執行指令碼,而不是僅限於活動標籤頁,並且僅響應使用者操作。

注意:您只能訪問使用者交互發生時(例如,單擊)的標籤頁/資料。當活動標籤頁導航離開時(例如,由於載入完成或其他事件),許可權將不再授予您訪問該標籤頁的許可權。

activeTab 許可權允許對頂層標籤頁的頁面和同源框架進行指令碼訪問。在 跨域框架內執行指令碼或修改樣式可能需要額外的主機許可權。當然,與特定網站和 URI 方案相關的限制和約束也適用。

通常,授予 activeTab 許可權的標籤頁是活動標籤頁,但有一個例外。擴充套件程式可以使用 menus API 建立一個選單項,當用戶右鍵單擊標籤頁時顯示。也就是說,在標籤頁切換器上的元素上顯示一個選單,使使用者能夠從一個標籤頁切換到另一個標籤頁。如果使用者單擊此選單,則授予使用者單擊的標籤頁的 activeTab 許可權,即使它不是活動標籤頁(從 Firefox 63 開始,Firefox bug 1446956)。

剪貼簿訪問

有兩個許可權使擴充套件程式能夠與剪貼簿進行互動

clipboardWrite

使用 Clipboard.write()Clipboard.writeText()document.execCommand("copy")document.execCommand("cut") 寫入剪貼簿

clipboardRead

使用 Clipboard.read()Clipboard.readText()document.execCommand("paste") 從剪貼簿讀取

有關更多詳細資訊,請參閱 與剪貼簿互動

無限制儲存

unlimitedStorage 許可權

  • 允許擴充套件程式超出 storage.local API 施加的任何配額
  • 在 Firefox 中,允許擴充套件程式建立“永續性”IndexedDB 資料庫,而無需瀏覽器在建立資料庫時提示使用者。

示例

json
 "permissions": ["*://mdn.club.tw/*"]

僅限 Manifest V2,請求訪問 developer.mozilla.org 下的特權頁面。

json
  "permissions": ["tabs"]

請求訪問 tabs API 的特權部分。

json
  "permissions": ["*://mdn.club.tw/*", "tabs"]

僅限 Manifest V2,同時請求以上兩個許可權。

瀏覽器相容性