HarmonyOS鸿蒙Next中webview有"webusb"的功能吗?如何实现。因为我们需要它来连接设备。
HarmonyOS鸿蒙Next中webview有"webusb"的功能吗?如何实现。因为我们需要它来连接设备。 如何实现webusb的功能,现在我发现H5内是可以访问usb对象的,但使用usb.requestDevice的时候,没有弹出设备选择的对话框。
【背景知识】
- usb.requestDevice:该接口是WebUSB API提供的一个方法,允许Web应用程序与连接的USB设备进行交互;
- JavaScriptProxy:提供了从前端页面调用应用侧ArkTS功能的通道;
- [@ohos.usbManager](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-usbmanager):在应用侧提供了管理usb设备的相关功能,包括获取usb设备、连接和传输数据等功能。
【解决方案】
当前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桥接实现,只是一个没有办法的办法呀。
楼主咨询下是需要在什么场景、什么设备上用到这个接口啊?
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设备,可以考虑以下替代方案:
-
使用HarmonyOS的原生USB API开发一个JS接口桥接层,通过Native-JS交互实现功能
-
对于设备连接需求,建议直接使用HarmonyOS的分布式能力或驱动开发框架,这能获得更好的性能和系统集成度
当前WebView中的USB对象访问受限是预期行为,系统不会弹出设备选择对话框。如有具体设备连接需求,建议基于HarmonyOS的硬件抽象层(HDF)进行开发。