Permissions API

注意:此功能在 Web Workers 中可用。

Permissions API 提供了一種統一的程式設計方式來查詢當前上下文(例如網頁或 worker)所關聯的 API 許可權狀態。例如,它可以用來確定是否已授予、拒絕或需要使用者特定許可權才能訪問某個功能或 API。

概念與用法

在過去,不同的 API 以不一致的方式處理各自的許可權。例如,Notifications API 提供了請求許可權和檢查許可權狀態的自定義方法,而 Geolocation API 則沒有。Permissions API 提供了工具,使開發人員能夠為處理許可權的使用者體驗實現一致性。

此 API 的許可權實際上彙總了該上下文的所有安全限制,包括使用 API 是否需要安全上下文、應用於文件的 Permissions-Policy 限制、使用者互動的要求以及使用者提示。因此,例如,如果某個 API 受許可權策略限制,則返回的許可權將是 denied(拒絕),並且不會向用戶顯示訪問提示。

permissions 屬性已新增到 Navigator 物件上,該物件同時存在於標準瀏覽上下文和 worker 上下文(WorkerNavigator — 因此許可權檢查在 worker 中可用),並返回一個 Permissions 物件,該物件提供了對 Permissions API 功能的訪問。

獲得該物件後,您就可以使用 Permissions.query() 方法,該方法返回一個 Promise,該 Promise 會解析為特定 API 的 PermissionStatus

請求許可權

如果許可權狀態為 prompt,則使用者必須透過提示來授予對該功能的訪問許可權。

觸發此提示的機制取決於特定 API — 它不是 Permissions API 的一部分。通常,觸發器是呼叫方法以訪問或開啟功能的程式碼,或者註冊來自該功能並隨後訪問它的通知的程式碼。

請注意,並非所有功能都需要提示。許可權可能由 Permission Policy 授予,透過 瞬時啟用隱式授予,或透過其他機制授予。

撤銷許可權

許可權撤銷不由 API 管理。具體來說,曾經提出了一個 Permissions.revoke() 方法,但後來已從已實現的瀏覽器中移除。

使用者可以透過瀏覽器設定手動移除特定網站的許可權

  • Firefox漢堡選單 > 設定 > 隱私與安全 > 許可權(然後選擇感興趣許可權的設定按鈕)。
  • Chrome漢堡選單 > 設定 > 顯示高階設定。在“隱私”部分,點選“內容設定”。在出現的對話方塊中,找到“位置”部分,選擇“在網站嘗試訪問時詢問…”。最後,點選“例外情況管理”並移除您授予感興趣網站的許可權。

支援許可權的 API

並非所有 API 的許可權狀態都可以使用 Permissions API 查詢。支援許可權的 API 的非詳盡列表包括:

介面

Permissions

提供核心的 Permissions API 功能,例如用於查詢和撤銷許可權的方法。

PermissionStatus

提供對許可權當前狀態的訪問,以及一個用於響應許可權狀態更改的事件處理程式。

其他介面的擴充套件

分別從主上下文和 worker 上下文提供對 Permissions 物件的訪問。

示例

我們建立了一個名為 Location Finder 的示例。您可以 線上執行示例在 GitHub 上檢視原始碼,或者閱讀我們文章 使用 Permissions API 中關於它如何工作的更多資訊。

Permissions.query() 示例也展示了測試當前瀏覽器的大多數許可權並記錄結果的程式碼。

規範

規範
Permissions

瀏覽器相容性

api.Permissions

api.Navigator.permissions

api.WorkerNavigator.permissions

另見