HarmonyOS鸿蒙Next中webview有"webusb"的功能吗?如何实现。因为我们需要它来连接设备。

HarmonyOS鸿蒙Next中webview有"webusb"的功能吗?如何实现。因为我们需要它来连接设备。 如何实现webusb的功能,现在我发现H5内是可以访问usb对象的,但使用usb.requestDevice的时候,没有弹出设备选择的对话框。

11 回复

【背景知识】

【解决方案】

当前ArkWeb中尚未支持usb.requestDevice接口,可通过javaScriptProxy接口,从前端触发调用应用侧的usbManager模块,实现usb设备获取、连接等功能,示例代码如下:

ArkTS代码:

class UsbManager {
  getUsbList() {
    let devicesLists: Array<usbManager.USBDevice> = usbManager.getDevices();
    return devicesLists;
  }
}

@Entry
@Component
struct WebParseDemo {
  webController: webview.WebviewController = new webview.WebviewController
  usbManager: UsbManager = new UsbManager();

  build() {
    Column() {
      Web({ src: $rawfile('index.html'), controller: this.webController })
        .javaScriptProxy({
          object: this.usbManager,
          name: "UsbManager",
          methodList: ["getUsbList"],
          controller: this.webController,
        })
        .domStorageAccess(true)
    }
  }
}

H5侧代码:

<!DOCTYPE html>
<html lang="en">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,viewport-fit=cover"/>
<body>
<button onclick="getLists()">扫描usb设备</button>
</body>
</html>
<script>
    function getLists() {
      console.info('get usb lists')
      return window.UsbManager.getUsbList()
    }
</script>

【总结】

通过H5调用应用侧函数,能够让H5调用到系统侧的能力,实现相关功能。

更多关于HarmonyOS鸿蒙Next中webview有"webusb"的功能吗?如何实现。因为我们需要它来连接设备。的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


对,通过桥接到ArkTS来实现webusb功能,现在已经实现的能力是在webview的主窗口中可以像使用标准的webusb一样来读写USB设备。但对于内部iframe的窗口暂时还不想实现,因为那样会大大增加复杂度,考虑未来实现。

那还需要系统的webview直接提供"webusb"相关的接口能力吗?

我开发的测量仪器,需要开发上位机程序。现在webusb功能已经基本实现了,未来几天内,我将在ohpm发布这个插件。以方便大家使用。

感谢楼主贡献!咨询下楼主是开发的OH相关的程序?usb相关的功能目前是通过桥接到arkts侧调用的系统usb相关接口实现的么?

1.0.0版本的 webusb_bridge 已经提交发布申请,git 地址:https://gitee.com/mini-tiger/webusb_bridge

当然需要,我现在用ArkTS桥接实现,只是一个没有办法的办法呀。

楼主咨询下是需要在什么场景、什么设备上用到这个接口啊?

目前webusb_bridge库已经发布,可通过ohpm install webusb_bridge直接安装试用。欢迎参与这个模块的设计与测试。

HarmonyOS Next的WebView目前不支持WebUSB API。鸿蒙的WebView基于系统自研内核,主要支持标准HTML5特性,但未集成WebUSB功能。若需连接USB设备,可使用鸿蒙的USB服务接口(@ohos.usb)直接开发原生功能,通过系统级API与设备通信。具体实现需调用usb.getDevices()获取设备列表,用usb.requestRight()申请权限,再通过usb.connectDevice()建立连接并进行数据传输。

在HarmonyOS Next中,WebView目前不支持WebUSB API的标准实现。这是出于系统安全性和稳定性考虑的设计决策。如果您需要在H5中连接USB设备,可以考虑以下替代方案:

  1. 使用HarmonyOS的原生USB API开发一个JS接口桥接层,通过Native-JS交互实现功能

  2. 对于设备连接需求,建议直接使用HarmonyOS的分布式能力或驱动开发框架,这能获得更好的性能和系统集成度

当前WebView中的USB对象访问受限是预期行为,系统不会弹出设备选择对话框。如有具体设备连接需求,建议基于HarmonyOS的硬件抽象层(HDF)进行开发。

回到顶部