鸿蒙与web混合开发双向通信

鸿蒙与web混合开发双向通信用runJavaScript和registerJavaScriptProxy

web

entry/src/main/resources/rawfile/1.html

bash 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>混合开发</title>
</head>
<body>
    <div></div>
    <img src="./a.png" alt="">
    <button onclick="selectImg()">打开相册</button>
</body>
</html>
<script>
    //直接写js代码
    function changeImg(){
        //1.获取img这个元素
        const img = document.querySelector('img')
        //2.修改元素的属性
        img.src = './b.png'
    }
    async function selectImg(){
      //通知鸿蒙,让鸿蒙设备打开相册
       const res = await harmonyDevice.selectImage()
       const div = document.querySelector('div')
       div.innerText = JSON.stringify(res)
    }

</script>

鸿蒙

bash 复制代码
import { webview } from '@kit.ArkWeb'
import { photoAccessHelper } from '@kit.MediaLibraryKit'
import { promptAction } from '@kit.ArkUI'

@Entry
@Component
struct Page {
  webController:WebviewController = new webview.WebviewController()
  selectImg(){
    const picker = new photoAccessHelper.PhotoViewPicker()
    return picker.select()
  }
  build() {
    Column(){
      // 1.想让网页干嘛,直接调网页的JS方法
      Button('鸿蒙-改变网页图片')
        .onClick(()=>{
            // 控制器
            this.webController.runJavaScript('changeImg()')
        })
      // 2.网页控制鸿蒙测
      Button('注入鸿蒙的事件')
        .onClick(()=>{
          promptAction.showToast({
            message:'注入成功'
          })
          // 1.先给网页一个对象,这个对象上包含了所有网页要用到的方法集合
          // 2.给这个对象起一个名字,让网页可以使用这个对象
          // 3.确定网页可以使用的方法集合
          this.webController.registerJavaScriptProxy(
            {
              selectImage:async()=>{
                const res = await this.selectImg()
                return res
              }
            },
            "harmonyDevice",
            ["selectImage"]
          )
        })
      // 1.加载的地址
      // 2.控制
      Button('刷新页面')
        .onClick(()=>{
           this.webController.refresh()
        })
      Web({
        // 本地:
        src:$rawfile('1.html'),
        // src:'https://www.amap.com/',
        controller:this.webController
      })
    }
    .width('100%')
    .height('100%')
  }
}
相关推荐
梦想不只是梦与想2 天前
鸿蒙 Live View Kit:实况窗服务(一)
harmonyos·鸿蒙·实况窗
空中海2 天前
HarmonyOS知识图谱和回顾
华为·知识图谱·鸿蒙
大雷神2 天前
HarmonyOS APP<<古今职鉴定>>开源教程第26篇:【完整案例】职业性格测试开发
harmonyos·arkts·鸿蒙·古今职鉴
therese_100862 天前
客户端设计(下):场景流派与实战设计方式
架构·安卓·鸿蒙
华清远见IT开放实验室3 天前
工程实战,应用导向:华清远见物联网“虚实融合“产教融合与实践教学方案
物联网·鸿蒙·全栈·星闪·虚拟仿真·无线传感网络
therese_100865 天前
客户端架构:为什么、什么时候、怎么做
设计模式·安卓·鸿蒙
aqi006 天前
一文理清 HarmonyOS 6.0.2 涵盖的十个升级点
android·华为·harmonyos·鸿蒙·harmony
小成Coder6 天前
【Jack实战】如何用 Core Vision Kit 给旅行票据做端侧 OCR 识别
华为·ocr·harmonyos·鸿蒙
wei_shuo6 天前
Windows 鸿蒙 PC 应用开发:DevEco Studio 集成与调用三方 Native 库实战指南
鸿蒙·鸿蒙pc·三方库适配