permissions.request()

询问用户是否授予 permissions.Permissions 对象中列出的权限。

Permissions 参数可以包含一个 origins 属性(一个 主机权限 数组)、一个 permissions 属性(一个 API 权限 数组),或者两者都包含。

请求的权限必须在 optional_permissions manifest.json 键中定义。origins 属性可以包含与可选权限匹配的主机子集的权限。例如,如果 optional_permissions 包含 "*://mozilla.org/",则 permissions.origins 可以包含 "https://mdn.org.cn/"

仅可选权限 的请求不能包含任何其他可选权限。

该请求只能在 用户操作 的处理程序中进行。除非所有请求的权限都已静默授予,否则浏览器会询问用户是否授予请求的权限。所有请求的权限将作为一个整体进行处理:要么全部授予,要么都不授予。

扩展会保留任何已授予的权限,即使在升级、禁用和重新启用周期中也是如此。

这是一个异步函数,返回一个 Promise

语法

js
let requesting = browser.permissions.request(
  permissions                // Permissions object
)

参数

permissions

一个 permissions.Permissions 对象。

返回值

一个 Promise,如果扩展被授予 permissions 参数中列出的权限,则该 Promise fulfilled 为 true;否则为 false

示例

此代码添加了一个点击处理程序,该处理程序请求各种权限,然后在请求完成后记录请求结果以及扩展的权限。

js
const permissionsToRequest = {
  permissions: ["bookmarks", "history"],
  origins: ["https://mdn.org.cn/"],
};

async function requestPermissions() {
  function onResponse(response) {
    if (response) {
      console.log("Permission was granted");
    } else {
      console.log("Permission was refused");
    }
    return browser.permissions.getAll();
  }

  const response = await browser.permissions.request(permissionsToRequest);
  const currentPermissions = await onResponse(response);

  console.log(`Current permissions:`, currentPermissions);
}

document
  .querySelector("#request")
  .addEventListener("click", requestPermissions);

扩展程序示例

浏览器兼容性

注意:此 API 基于 Chromium 的 chrome.permissions API。