# 音乐 **Repository Path**: itmds/it1 ## Basic Information - **Project Name**: 音乐 - **Description**: 项目实战音乐dqwqwfrq+ - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-08-05 - **Last Updated**: 2025-07-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 鸿蒙混合开发的通信方式:鸿蒙原生端和网页的数据交互过程 1.通过端口通信模型 第一步,先创建通信端口 controller: webview.WebviewController = new webview.WebviewController() currentPorts: webview.WebMessagePort[] = [] createPorts() { this.currentPorts = this.controller.createWebMessagePorts() //创建通信的端口 if (this.currentPorts?.length > 0) { //选择第二个端口传值给网页端 鸿蒙给网页传数据的端口 this.controller.postMessage("trans_port", [this.currentPorts[1]], "*") } } 第二步,网页中获取鸿蒙端传递的数据 注意:在鸿蒙中默认不会执行显示网页中alert提示框,在web组件中添加onAlert监听 .onAlert((event) => { promptAction.showToast({ message: event?.message }) return true }) 第三步:网页中发送数据给鸿蒙端,在网页中定义一个数据的发送方法 function sendMessage(){ //发送数据给鸿蒙端 if(currentPort){ currentPort.postMessage(JSON.stringify({type:"alert", message: "这是我网页上的一个小秘密!"})) }else{ alert("消息不通") } } 第四部:鸿蒙端接受网页数据 createPorts() { this.currentPorts = this.controller.createWebMessagePorts() //创建通信的端口 if (this.currentPorts?.length > 0) { //选择第二个端口传值给网页端 this.controller.postMessage("trans_port", [this.currentPorts[1]], "*") //选择一个端口作为接收网页端回传数据 this.currentPorts[0].onMessageEvent((result: webview.WebMessage) => { if (typeof result === "string") { promptAction.showToast({ message: result }) } }) } } 2.通过sdk方法传值方式:在鸿蒙端可以将需要的方法提前定义好提供给网页调用,通过这个方法实现数据的互通 第一步:定义需要使用的方法 class WebSdk { controller: webview.WebviewController = new webview.WebviewController() //在鸿蒙端定义方法,可以在网页端进行调用 openPhoto() { promptAction.showToast({ message: "打开相册" }) } getMessage(){ promptAction.showToast({ message: "获取消息" }) } } 第二步:在创建web对象时,需要通过javaScriptProxy将方法注入给网页的js中 Web({ src: $rawfile("sdk.html"), controller: this.sdk.controller }) .width('100%') .layoutWeight(1) .javaScriptProxy({ name: "itluma", //自定义的名称 object: this.sdk, //对象名 methodList: ["openPhoto","getMessage"], //方法名 controller: this.sdk.controller //web组件的控制器对象 }) 第三步:在网页使用注入的方法 function openPhoto(){ //调用鸿蒙端提供的方法 if(window.itluma){ window.itluma.openPhoto() } } 第四步:也可以在鸿蒙端使用网页中的方法 this.sdk.controller.runJavaScript(`网页中定义的js方法`)