【问题标题】:Does WebUSB is supported by permissions infrastructure?权限基础架构是否支持 WebUSB?
【发布时间】:2020-12-17 10:05:35
【问题描述】:

WebUSB API 文档向权限基础结构 (https://wicg.github.io/webusb/#permission-api) 引入了名为“usb”的新强大功能。但是当我尝试使用权限 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),因为我不想在您每次连接新设备时让您厌烦权限问题特定类型”。

【问题讨论】:

    标签: permissions webusb


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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-04-02
      • 2013-06-10
      • 2019-02-24
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2019-02-03
      • 1970-01-01
      相关资源
      最近更新 更多