了解 WebUSB 连接工作流程

Understanding the WebUSB connection workflow

我正在开发一个 Chrome 网络应用程序,它在 Android 设备上使用 WebUSB 运行,我正在尝试了解连接管理的工作原理。

如果我没看错规范,如果您还没有与 USB 设备交互的权限,您可以调用 requestDevice 以获取用户的权限以触发初始连接工作流。您也可以先调用 getDevices() 以查看是否已授予权限,如果已授予权限,则可以从那里继续而不经过初始连接工作流程。

假设这是一个准确的摘要(如果不正确请纠正我!),那么如何存储和管理连接信息?如果我去 chrome://usb-devices,我看不到这些设备,如果它们当前没有插入。如果我去本地存储,我看不到任何看起来像列表的东西设备。已经授权的信息存放在哪里?是否可以手动或以编程方式忘记连接信息?

提前致谢!

调用 navigator.usb.requestDevice() 将提示用户在浏览器选择器中选择 USB 设备。选择后,浏览器会内部记住用户授予访问权限的设备。 从那里,当插入时,这些设备将可以在没有用户提示的情况下访问 navigator.usb.getDevices().

在 Chrome 101 中,网站可以通过调用 USB 设备对象上的 forget() 方法来撤销对设备的访问。参见 https://web.dev/usb/#revoke-access

用户也可以直接从浏览器的“页面信息”气泡中撤销对 USB 设备的访问。请参阅下面的屏幕截图。

权限存储在 Chrome 的用户首选项文件中,如果您对此感到好奇,可以在 chrome://prefs-internals 查看原始数据并搜索 "usb_chooser_data"

要查看和编辑 USB 权限,您可以按照其他答案的建议打开页面信息对话框,或者访问桌面上的 chrome://settings/content/usbDevices。这将显示当前未连接的设备的权限。