如何读取COM端口?navigator.serial.getPorts 返回空列表

Jin*_*ska 3 google-chrome

我连接了少量 USB 串行接口(一个 HF 收发器、基于 Arduino 的 CW 键控器)和两个蓝牙端口,我从未使用过它们,并且不确定它们来自哪里(可能是某些应用程序)。在我的 SPA 中,我需要阅读端口列表,以便能够选择连接哪个端口作为哪个功能。

然而,当我打电话时,navigator.serial.getPorts()我总是得到一个空列表。navigator.usb.getDevices()顺便说一句,它在 Chrome 版本 87.0.4280.141(官方版本)(64 位)上运行也是如此。串行 API 已启用。

怎么解决这个问题呢?

更新:它是从本地文件系统中的 HTML 文件中的脚本调用的(不通过 HTTP 提供服务)

Kai*_*ido 10

您需要首先调用以下命令来请求用户读取串行端口的权限navigator.serial.requestPort()

onclick = async () => {

  await navigator.serial.requestPort();
  console.log( await navigator.serial.getPorts() );

};
Run Code Online (Sandbox Code Playgroud)

实例

  • 我没有参与这个规范的编写,如果你想让别人听到你的声音,他们有一个 [github repo](https://github.com/wicg/serial/) 然后你误读了那里的例子,序言段落指出“***一旦站点有权访问端口**,它就可以接收这些事件并查询它当前有权访问的一组连接设备。*”。最后,您是否从我的实际示例的弹出窗口中选择了一个这样的端口?奇怪的是你什么都没有,绝对适合我。 (2认同)