权限:query() 方法
注意:此功能在 Web Workers 中可用。
query()
方法是 Permissions
接口的方法,用于返回全局作用域中用户权限的状态。
语法
js
query(permissionDescriptor)
参数
permissionDescriptor
-
一个对象,用于设置
query
操作的选项,包含一个由逗号分隔的名称-值对列表。可用的选项是
返回值
一个 Promise
,它解析为一个 PermissionStatus
对象。
异常
InvalidStateError
DOMException
-
如果在浏览上下文中调用
query()
方法,并且其关联的文档未完全激活,则抛出此异常。 TypeError
-
如果以某种方式检索
PermissionDescriptor
信息失败,或者权限不存在或不受用户代理支持,则抛出此异常。
示例
根据地理位置权限显示新闻
此示例演示了如果授予了 geolocation
权限,如何显示与当前位置相关的新闻,否则提示用户启用位置访问权限。
js
navigator.permissions.query({ name: "geolocation" }).then((result) => {
if (result.state === "granted") {
showLocalNewsWithGeolocation();
} else if (result.state === "prompt") {
showButtonToEnableLocalNews();
}
// Don't do anything if the permission was denied.
});
测试对各种权限的支持
此示例显示了查询每个权限的结果。
代码使用 navigator.permissions.query()
查询每个权限,记录权限状态或权限在浏览器中不受支持的事实。请注意,query()
在 try...catch
块内调用,因为如果权限不受支持,关联的 Promise
将被拒绝。
js
// Array of permissions
const permissions = [
"accelerometer",
"accessibility-events",
"ambient-light-sensor",
"background-sync",
"camera",
"clipboard-read",
"clipboard-write",
"geolocation",
"gyroscope",
"local-fonts",
"magnetometer",
"microphone",
"midi",
"notifications",
"payment-handler",
"persistent-storage",
"push",
"screen-wake-lock",
"storage-access",
"top-level-storage-access",
"window-management",
];
processPermissions();
// Iterate through the permissions and log the result
async function processPermissions() {
for (const permission of permissions) {
const result = await getPermission(permission);
log(result);
}
}
// Query a single permission in a try...catch block and return result
async function getPermission(permission) {
try {
const result = await navigator.permissions.query({ name: permission });
return `${permission}: ${result.state}`;
} catch (error) {
return `${permission} (not supported)`;
}
}
运行代码的日志显示在下面
规范
规范 |
---|
权限 # dom-permissions-query |
浏览器兼容性
BCD 表格仅在启用了 JavaScript 的浏览器中加载。