鸿蒙搭配前端开发:应用端与WEB端交互

鸿蒙系统(HarmonyOS)是华为开发的一款面向全场景的分布式操作系统,其设计初衷是为了适应物联网时代的需求,旨在构建一个统一的操作系统,支持多种设备的无缝协同工作。其分布式开发的一些主要优势:

  1. 跨设备协同: 鸿蒙系统支持跨设备的分布式软总线技术,使得不同类型的设备能够像一台设备一样协同工作,实现资源共享和服务迁移。

  2. 一次开发多端部署: 开发者可以使用一套代码库开发出能在不同设备上运行的应用程序,这大大减少了开发成本和维护复杂度。这种“写一次,到处运行”的能力提高了开发效率。

  3. 灵活的模块化设计: 鸿蒙应用可以被拆分成多个可独立部署的服务模块(Ability),每个模块可以根据需要部署在不同的设备上。这样的模块化设计有助于实现按需加载和服务的动态组合。

  4. 强大的安全机制: 鸿蒙系统内置了多层次的安全机制,包括设备认证、数据加密、权限控制等,确保设备间的通信安全以及用户数据的安全。

  5. 高性能的通信能力: 利用鸿蒙系统的分布式软总线技术,设备间的通信延迟更低,数据传输速度更快,为用户提供更加流畅的体验。

  6. 低功耗优化: 针对物联网设备的特点,鸿蒙系统特别优化了功耗管理,能够在保证用户体验的同时延长设备的续航时间。

下面,给友友们分享鸿蒙开发中应用端与WEB段交互的手段-通过特定的API暴露给Web页面一些原生的能力。

WEB组件加载页面

页面加载是Web组件的基本功能。根据页面加载数据来源可以分为三种常用场景,包括加载网络页面、加载本地页面、加载HTML格式的富文本数据。本次分享主要是加载网路页面,涉及网络资源的获取,首先要配置ohos.permission.INTERNET网络访问权限。

  • @ohos.web.webview模块为网页控制提供 API,它用于显示网页。
  • 通过WebviewController可以控制Web组件各种行为。一个WebviewController对象只能控制一个Web组件,且必须在Web组件和WebviewController绑定后,才能调用WebviewController上的方法(静态方法除外)。
  • Web组件支持使用DevTools工具调试前端页面。DevTools是一个 Web前端开发调试工具,提供了电脑上调试移动设备前端页面的能力。开发者通过setWebDebuggingAccess()接口开启Web组件前端页面调试能力,利用DevTools工具可以在电脑上调试移动设备上的前端网页,设备需为4.1.0及以上版本。
  • web({ src: "  ". controller: tis.controller })设置了加载页面的url
  • domStorageAccess(domStorageAccess: boolean)
  • 设置是否开启文档对象模型存储接口(DOM Storage API)权限,默认未开启。
  • fileAccess(fileAccess: boolean)
  • 设置是否开启应用中文件系统的访问,默认启用。$rawfile(filepath/filename)中rawfile路径的文件不受该属性影响而限制访问。
  • javaScriptAccess(javaScriptAccess: boolean)
  • 设置是否允许执行JavaScript脚本,默认允许执行。
  • mixedMode(mixedMode: MixedMode)
  • 设置是否允许加载超文本传输协议(HTTP)和超文本传输安全协议(HTTPS)混合内容,默认不允许加载HTTP和HTTPS混合内容。
  • 使用当前窗口实例,便于后期调用接口。
// xxx.ets
import web_webview from '@ohos.web.webview';
import business_error from '@ohos.base';
import window from '@ohos.window'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController();build() {Column() {aboutToAppear() {// 设置不显示导航栏和状态栏window.getLastWindow(this.context).then((data) => {data.setWindowSystemBarEnable([]).then(() => {LogUtil.debug('Succeeded in setting the system bar to be invisible.');});});// 配置Web开启调试模式web_webview.WebviewController.setWebDebuggingAccess(true);}// 组件创建时,加载www.example.comWeb({ src:"http://10.1.1.12:8989/", controller: this.controller }).javaScriptAccess(true).fileAccess(true).domStorageAccess(true).mixedMode(MixedMode.All)}}
}

WEB端调用应用端函数

开发者使用Web组件将应用侧代码注册到前端页面中,注册完成之后,前端页面中使用注册的对象名称就可以调用应用侧的函数,实现在前端页面中调用应用侧方法。

注册应用侧代码有两种方式,一种在Web组件初始化调用,使用javaScriptProxy()接口。另外一种在Web组件初始化完成后调用,使用registerJavaScriptProxy()接口。

下面讲解使用registerJavaScriptProxy()接口的方法:

  • javaScriptProxy()用于注入JavaScript对象到window对象中,并在window对象中调用该对象的方法。所有参数不支持更新。此接口只支持注册一个对象,若需要注册多个对象请使用registerJavaScriptProxy()
  • registerJavaScriptProxy提供了应用与Web组件加载的网页之间强大的交互能力。
  • 注入JavaScript对象到window对象中,并在window对象中调用该对象的方法。注册后,须调用refresh接口生效。
// xxx.ets
import web_webview from '@ohos.web.webview';
import business_error from '@ohos.base';
import { GetTest } from '../common/GetTest';@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController();build() {Column() {aboutToAppear() {// 配置Web开启调试模式web_webview.WebviewController.setWebDebuggingAccess(true);}// 组件创建时,加载www.example.comWeb({ src:"http://10.1.1.12:8989/", controller: this.controller }).javaScriptAccess(true).fileAccess(true).domStorageAccess(true).mixedMode(MixedMode.All)}}
private registerJavaScript() {// TODO 如何将多个对象注入到同一个window对象中let getTest = new GetTest()this.controller.registerJavaScriptProxy(getTest, "getTest", ["say"])this.controller.refresh()}
}
<!-- index.html -->
<!DOCTYPE html>
<html>
<body>
<button type="button" onclick="callArkTS()">Click Me!</button>
<p id="demo"></p>
<script>function callArkTS() {let str = window.getTest.say();document.getElementById("demo").innerHTML = str;console.info('ArkTS Hello World! :' + str);}
</script>
</body>
</html>

此时在前端页面中就可以看到打印内容啦。


更新!2025.02.24

鸿蒙ArkTS代码实现原生功能注入到Vue前端的原理详解:

通过 ArkTS Web组件 创建混合应用框架,利用 JavaScript桥接 技术实现原生能力注入。整体流程为:

鸿蒙原生能力 → 通过JS桥接注入 → Webview全局对象 → Vue组件调用

注册JS代理
private registerJavaScript() {let getTest = new GetTest()this.controller.registerJavaScriptProxy(getTest,        // 原生对象实例"getTest",      // 注入到window的对象名["say"]         // 暴露的方法白名单)this.controller.refresh() // 重新加载使注入生效
}

这是桥接实现的核心方法,关键参数说明:

  • getTest:封装了say()等原生方法的ArkTS类实例

  • "getTest":将对象挂载到Webview的window.getTest

  • ["say"]:仅暴露指定方法,保证安全性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/97884.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/97884.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

配置sscms时被sql server处处刁难

今天要记下来的是一个小例子。接前面&#xff0c;当我终于完成sql server的安装时&#xff0c;才发现要填写sscms的两个空是有多么艰难。首先安装sql server2016出现了太多环境不兼容的问题&#xff0c;让我只好退而安装sql server2012。安装sql server2012时其实是可以避坑的&…

【Flink】DataStream API:源算子、数据类型

目录源算子&#xff08;Source&#xff09;从集合中读取数据从文件读取数据从Socket读取数据从Kafka读取数据从数据生成器读取数据Flink支持的数据类型Flink的类型系统Flink支持的数据类型类型提示&#xff08;Type Hints&#xff09;源算子&#xff08;Source&#xff09; Fli…

Linux 安装docker-compose安装方法(安装docker compose安装)

文章目录**方法一&#xff1a;通过 curl 下载二进制文件&#xff08;推荐&#xff09;**1. 安装前准备- **确保已安装 Docker**- **检查 Docker 是否安装成功**2. 下载并安装 Docker Compose- **下载最新版本的 Docker Compose 二进制文件**- **国内加速下载&#xff08;解决 G…

OCR 发票识别与验真接口:助力电子化发票新时代

自 2025 年 10 月 1 日起&#xff0c;纸质火车票彻底告别历史舞台&#xff0c;全面数字化的电子发票取而代之&#xff0c;这一变革标志着票务领域的重大革新&#xff0c;也让电子化发票处理的需求呈井喷式增长。在此背景下&#xff0c;OCR 发票识别和发票验真接口技术挺身而出&…

设计模式:抽象工厂模式(Abstract Factory Pattern)

文章目录一、概念二、实例分析三、完整示例一、概念 抽象工厂模式是一种创建型设计模式。 提供一个接口用于创建一系列相关或相互依赖的对象&#xff0c;而无需指定它们的具体类。 相比于工厂方法模式&#xff0c;抽象工厂模式不仅仅是创建单一产品&#xff0c;而是一族产品&am…

轻量级注意力模型HOTSPOT-YOLO:无人机光伏热异常检测新SOTA,mAP高达90.8%

【导读】 无人机光伏巡检如何更智能、更高效&#xff1f;HOTSPOT-YOLO模型给出了亮眼答案&#xff01;给AI装上“热成像鹰眼”&#xff0c;能精准锁定光伏板上的细微热斑缺陷。它不仅将检测精度&#xff08;mAP&#xff09;提升至90.8%&#xff0c;更在保持实时性的前提下大幅…

CHT共轭传热: 导热系数差异如何影响矩阵系数

文章目录 一、导热系数差异如何影响矩阵系数&#xff1f;二、如何处理系数差异以加速收敛&#xff1f;1. **变量重缩放&#xff08;Scaling of Variables&#xff09;**2. **使用物理型预条件子&#xff08;Physics-based Preconditioning&#xff09;**3. **区域分解法&#x…

Vue Vapor 事件机制深潜:从设计动机到源码解析

基于 vue3.6&#xff08;alpha 阶段&#xff09;及 Vapor 的最新进展撰写&#xff1b;Vapor 仍在演进中&#xff0c;部分实现可能继续优化。TL;DR&#xff08;速览&#xff09; 传统&#xff08;≤3.5&#xff09;&#xff1a;事件以元素为中心绑定&#xff1b;每个元素用 el._…

Day 01(01): Hadoop与大数据基石

目标&#xff1a;建立对大数据生态的整体认知&#xff0c;理解HDFS和MapReduce的核心思想。 8:00-9:30&#xff1a;【视频学习】在B站搜索“Hadoop入门”或“三小时入门大数据”&#xff0c;观看1-2个高播放量的简介视频&#xff0c;了解大数据面临的问题和Hadoop的解决方案。 …

开源 + 免费!谷歌推出 Gemini CLI,Claude Code 的强劲对手

在如今飞速发展的 AI 工具生态中&#xff0c;命令行界面&#xff08;CLI&#xff09;这一开发者与计算机交互的传统方式&#xff0c;正悄然发生着一场颠覆性的变革。2025 年 6 月 25 日&#xff0c;谷歌正式发布开源的 Gemini CLI&#xff0c;这一举措标志着谷歌 Gemini AI 能力…

MacOS - 记录MacOS发烫的好几天 - 幕后黑手竟然是

MacOS - 记录MacOS发烫的好几天 - 幕后黑手竟然是 Mac是不可能出bug的&#xff0c;一定是世界出bug了。 前言 几天前Mac突然开始烫烫的&#xff0c;就这么一烫烫了好几天。这可不行&#xff0c;所以看了下“活动监视器”&#xff0c;发现了一个Code Helper(Plugin)占据200%上下…

Vue基础知识-Vue中:class与:style动态绑定样式

完整源码<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><script src&quo…

终于赶在考试券过期前把Oracle OCP证书考下来了!

&#x1f6a9; 今天终于能松口气了——Oracle OCP证书到手&#xff01; 差点白白浪费一次考试机会&#xff08;1700&#xff09;&#xff01;3月底报名了Oracle OCP&#xff0c;摆烂了大半年&#xff0c;终于是逼着自己在考试券过期前考完了082和083科目&#xff0c;目前已经顺…

Power BI学习笔记-周报销售数据分析

Power BI学习笔记-周报销售数据分析 简介 来自B站的Power BI学习视频的学习笔记。 记录来自B站的Power BI教学视频&#xff0c;由“高级财务BP-Ni”发布&#xff0c;视频发布者主要发布财务类相关的PBI视频&#xff0c;视频长度30分钟左右。 视频链接&#xff1a; 【powerbi周报…

Oracle 数据库与操作系统兼容性指南

前言 作为一个在 Oracle 坑里摸爬滚打多年的老 DBA&#xff0c;最怕听到的就是"这个版本能不能装在这个系统上&#xff1f;"这种问题。昨天又有朋友来问我 Oracle 数据库和操作系统的兼容性&#xff0c;索性把这些年积累的官方兼容性列表整理出来&#xff0c;省得大家…

pytorch初级

本文章是本人通过读《Pytorch实用教程》第二版做的学习笔记&#xff0c;深度学习的核心部分&#xff1a;数据准备 ➡️ 模型构建 ➡️ 模型训练 ➡️ 模型评估与应用。根据上面的思路&#xff0c;我们分为几个部分&#xff1a; 第一部分&#xff1a;PyTorch 基础 - 涵盖了从基本…

UniApp 混合开发:Plus API 从基础到7大核心场景实战的完整指南

在 UniApp 混合开发中&#xff0c;plus API 是连接前端代码与原生设备能力的核心桥梁。基于 5 Runtime&#xff0c;它封装了设备硬件、系统交互、网络通信等近百种原生能力&#xff0c;解决了 UniApp 跨端 API 覆盖不足的问题。但直接使用 plus API 常面临兼容性复杂、回调嵌套…

本周难点问题详细总结

&#x1f4cb; 本周技术问题总结 &#x1f534; 1. 表单校验与用户体验 1.1 表单错误提示不规范 问题&#xff1a;校验失败时缺少页面标识位置&#xff1a;SupplierForm.vue:375代码示例&#xff1a;message.error([基本信息] 表单校验失败&#xff0c;请检查必填字段)影响&…

下一代自动驾驶汽车系统XIL验证方法

摘要自动驾驶汽车测试仍是一个新兴且尚未成熟的过程&#xff0c;全球统一的测试流程尚需时日。实车测试对资源要求极高&#xff0c;因此开发并提升基于虚拟环境的测试方法的效率至关重要。有鉴于此&#xff0c;本文提出一种新颖的 X-in-the-Loop&#xff08;XIL&#xff0c;X 代…

视频数据如何联网共享?

视频数据如何联网共享&#xff1f; 视频联网共享系统&#xff0c;实现前端设备的接入管理以及接入数据的获取。前端设备包括视频设备、卡口设备、Wifi数据采集设备、移动采集设备以及GPS/北斗数据采集设备等。系统实现海量视频数据的快速检索&#xff0c;并为上层数据应用提供视…