一、注册时机的选择与接口差异
-
初始化阶段注册
使用javaScriptProxy()在Web组件初始化时注入对象,直接绑定到前端页面:.javaScriptProxy({ object: this.testObj, name: "testObjName", methodList: ["test"], controller: this.webviewController }) -
动态注册场景
通过registerJavaScriptProxy()在Web组件初始化完成后动态注册,需搭配deleteJavaScriptRegister()防止内存泄漏,注册后必须调用refresh()触发页面更新。
二、数据类型与通信能力
-
复杂类型支持
- 支持传递数组(如
Array<number>)、对象(如自定义类实例) - 支持回调函数双向交互,例如:
testCallback(callback: (data: string) => void): void { callback("Received data from ArkTS"); } - 支持传递数组(如
-
异步通信机制
- 通过
postMessage实现原生与Web页面的双向通信 - 支持Promise异步调用模式,保障复杂业务逻辑的流畅性
- 通过
三、关键注意事项
-
内存管理
- 动态注册后必须调用
refresh()使配置生效 - 页面销毁时需调用
deleteJavaScriptRegister()清理资源
- 动态注册后必须调用
-
跨端适配
注册逻辑需考虑不同设备(手机/平板/智慧屏)的WebView内核差异,确保API兼容性
鸿蒙通过javaScriptProxy与registerJavaScriptProxy实现应用侧代码注册,支持复杂数据类型与异步通信,动态注册需搭配refresh()生效,开发者需关注权限控制与内存管理。