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 的非詳盡列表包括:
- Background Synchronization API:
background-sync(應始終授予) - Clipboard API:
clipboard-read、clipboard-write - Compute Pressure API:
compute-pressure - Geolocation API:
geolocation - Local Font Access API:
local-fonts - Media Capture and Streams API:
microphone、camera - Notifications API:
notifications - Payment Handler API:
payment-handler - Push API:
push - Screen Capture API:
captured-surface-control、display-capture - Screen Wake Lock API:
screen-wake-lock - Sensor APIs:
accelerometer、gyroscope、magnetometer、ambient-light-sensor - Storage Access API:
storage-access、top-level-storage-access - Storage API:
persistent-storage - Web Bluetooth API:
bluetooth - Web MIDI API:
midi - Window Management API:
window-management
介面
Permissions-
提供核心的 Permissions API 功能,例如用於查詢和撤銷許可權的方法。
PermissionStatus-
提供對許可權當前狀態的訪問,以及一個用於響應許可權狀態更改的事件處理程式。
其他介面的擴充套件
-
分別從主上下文和 worker 上下文提供對
Permissions物件的訪問。
示例
我們建立了一個名為 Location Finder 的示例。您可以 線上執行示例,在 GitHub 上檢視原始碼,或者閱讀我們文章 使用 Permissions API 中關於它如何工作的更多資訊。
Permissions.query() 示例也展示了測試當前瀏覽器的大多數許可權並記錄結果的程式碼。
規範
| 規範 |
|---|
| Permissions |
瀏覽器相容性
api.Permissions
載入中…
api.Navigator.permissions
載入中…
api.WorkerNavigator.permissions
載入中…