当前位置: 首页 > news >正文

鸿蒙与h5的交互

一 、对象注入,h5调用鸿蒙方法--javaScriptProxy

// xxx.ets
import web_webview from '@ohos.web.webview';class WebViewModel {constructor() {}webCallBack() {console.log('webCallBack')}
}@Entry
@ComponentV2
struct WebComponent {webviewController: web_webview.WebviewController = new web_webview.WebviewController();// 声明需要注册的对象@Local vm: WebViewModel = new WebViewModel();build() {Column() {// web组件加载本地index.html页面Web({ src: $rawfile('test1.html'), controller: this.webviewController }).domStorageAccess(true).javaScriptAccess(true)// 将对象注入到web端.javaScriptProxy({object: this.vm,name: "harmony",methodList: ["webCallBack"],controller: this.webviewController})}}
}html代码:
<!-- index.html -->
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta content="width=device-width, initial-scale=1.0" name="viewport">
</head><body>
<div class="btn-box"><button class="btn" onclick="callArkTS()" type="button">Click Me!</button><p id="demo"></p>
</div></body>
<script>function callArkTS() {window.harmony.webCallBack();}
</script></html>

二、对象注入,方式二---javaScriptProxy

// xxx.ets
import web_webview from '@ohos.web.webview';@Entry
@ComponentV2
struct WebComponent {webviewController: web_webview.WebviewController = new web_webview.WebviewController();build() {Column() {// web组件加载本地index.html页面Web({ src: $rawfile('test1.html'), controller: this.webviewController }).domStorageAccess(true).javaScriptAccess(true)// 将对象注入到web端.javaScriptProxy({object: {nativeMethod: (channelName: string, paramsCallback: number) => {console.log('paramsCallback' + paramsCallback)if (!channelName || !paramsCallback) {return}if (paramsCallback) {}},},name: "harmony",methodList: ["nativeMethod"],controller: this.webviewController})}}
}html代码:
<!-- index.html -->
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta content="width=device-width, initial-scale=1.0" name="viewport">
</head><body>
<div class="btn-box"><button class="btn" onclick="callArkTS()" type="button">Click Me!</button><p id="demo"></p>
</div></body>
<script>function callArkTS() {window.harmony.nativeMethod( "callArkTS", "params");}
</script></html>

三、原生调用h5的方法--runJavaScript

// xxx.ets
import web_webview from '@ohos.web.webview';@Entry
@ComponentV2
struct WebComponent {webviewController: web_webview.WebviewController = new web_webview.WebviewController();@Local value1: string = 'value1'@Local value2: string = 'value2'build() {Column() {// web组件加载本地index.html页面Web({ src: $rawfile('test1.html'), controller: this.webviewController }).fileAccess(true).domStorageAccess(true).zoomAccess(false).onPageEnd(() => {this.webviewController.runJavaScript(`nativeFn("${this.value1}","${this.value2}")`)})}}
}html代码:
<!-- index.html -->
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta content="width=device-width, initial-scale=1.0" name="viewport">
</head><body>
<div class="btn-box"><button class="btn" onclick="callArkTS()" type="button">Click Me!</button><p id="demo"></p>
</div></body>
<script>function nativeFn(value1, value2) {console.log('原生调用' + value1 + '--' + value2);}
</script></html>

http://www.lqws.cn/news/514513.html

相关文章:

  • AR美型SDK,重塑面部美学,开启智能美颜新纪元
  • 微信小程序适配 iPhone 底部导航区域(safe area)的完整指南
  • 【JAVA】idea中打成jar包后报错错误: 找不到或无法加载主类
  • 大学专业科普 | 物联网、自动化和人工智能
  • IO多路复用——Poll底层原理深度分析
  • 深入解析RS485通信:从原理到Linux驱动开发实践
  • DeepSeek在数据分析与科学计算中的革命性应用
  • “易问易视”——让数据分析像聊天一样简单
  • 终止分区表变更操作时误删数据字典缓存导致MySQL崩溃分析
  • 【网站内容安全检测】之2:从网站所有URL页面中提取所有外部及内部域名信息
  • 批量DWG转PDF工具
  • 提供一种在树莓派5上切换模式的思路(本文是面向显示屏配置文件)
  • LVS-DR负载均衡群集深度实践:高性能架构设计与排障指南
  • BUUCTF在线评测-练习场-WebCTF习题[ACTF2020 新生赛]BackupFile1-flag获取、解析
  • 一款实验室创客实验室用的桌面式五轴加工中心
  • 04-html元素列表-表格-表单
  • django request.data.get 判断有没有 某个参数
  • GROUP BY、UNION和COALESCE协作
  • 电商导购app平台的缓存策略与性能优化方案:架构师的实践经验
  • 【番外篇】TLS指纹
  • 4.1 ROS颜色目标识别与定位
  • 【大厂机试题解法笔记】分解连续正整数组合/ 分解正整数
  • 探索解析C++ STL中的 list:双向链表的高效实现与迭代器
  • 领域驱动设计(DDD)【13】之重构中的坏味道:深入理解依恋特性(Feature Envy)与表意接口模式
  • 没有VISA怎么注册AWS?
  • Flutter - 原生交互 - 相册
  • C语言基础回顾与Objective-C核心类型详解
  • QT 学习笔记摘要(三)
  • 每日AI资讯速递 | 2025-06-25
  • TDengine 的 CASE WHEN 语法技术详细