首页 > 解决方案 > 权限基础架构是否支持 WebUSB?

问题描述

WebUSB API 文档将名为“usb”的新强大功能引入权限基础架构 ( https://wicg.github.io/webusb/#permission-api )。但是当我尝试使用权限 api 来查询“usb”的权限时:

navigator.permissions.query({name:'usb'})

我收到错误:

TypeError: Failed to execute 'query' on 'Permissions': The provided value 'usb' is not a valid enum value of type PermissionName.

我在 Ubuntu 上使用 Chrome 版本 83.0.4103.97(官方构建)(64 位)。我的第一个问题:

  1. 权限 api 是否支持“usb”功能?如果是,我在上面的代码中做错了什么?

WebUSB 上的规范定义了存储允许设备的位置,但它再次提供了使用我理解的权限基础设施(https://wicg.github.io/webusb/#request-the-usb-permission)。我的第二个问题:

  1. 如果权限 api 尚不支持“usb”功能,允许的设备在哪里/如何存储在浏览器中?我可以以编程方式访问此存储吗?

  2. 网站可以请求用户允许对不仅现在连接而且将来可以连接的设备组(在我的情况下是 vid+pid)的权限?换句话说,我想问用户“请让我使用您将来连接的 USB 设备(使用此 vid+pid),因为我不想在您每次连接新设备时让您厌烦权限问题特定类型”。

标签: permissionswebusb

解决方案


  1. 权限 api 是否支持“usb”功能?如果是,我在上面的代码中做错了什么?

不可以。虽然规范中定义的 Permissions API 集成是在基于 Chromium 的浏览器中实现的,但它不会通过 Permissions API 的query()方法公开。问题 638721对此进行了跟踪,但考虑到可用的替代方案,这并不是优先事项。

  1. 如果权限 api 尚不支持“usb”功能,允许的设备在哪里/如何存储在浏览器中?我可以以编程方式访问此存储吗?

权限存储在浏览器的用户偏好文件和 JavaScript 无法直接访问的内部数据结构中。当前公开这些权限的唯一方法是通过设置 UI (chrome://settings/content/usbDevices) 和navigator.usb.getDevices()方法,该方法仅在当前连接时返回允许的设备。

  1. 网站可以请求用户允许对不仅现在连接而且将来可以连接的设备组(在我的情况下是 vid+pid)的权限?换句话说,我想问用户“请让我使用您将来连接的 USB 设备(使用此 vid+pid),因为我不想在您每次连接新设备时让您厌烦权限问题特定类型”。

不。对于 API 的安全设计,用户根据当前连接的设备而不是假设的未来设备做出决定是很重要的。

对于企业管理的设备,WebUsbAllowDevicesForUrls策略允许管理员代表其用户做出此类决定。


推荐阅读