鸿蒙系列--Web组件

news/2024/12/23 5:31:18/

一、介绍

提供网页显示能力的组件

二、基础使用

接口:

Web(options: { src: string, controller?: WebController })

参数:

  • src:是网页资源地址,可以是本地资源,也可以是网络资源
  • controller:控制器,可以控制Web组件的各种行为,如网页前进、后退等

加载在线网页:

只需要给src指定引用的网页路径

 Web({ src: 'https://www.baidu.com/', controller: this.controller })

加载本地网页

首先在main/resources/rawfile目录下创建一个HTML文件,然后通过$rawfile引用本地网页资源

Web({ src: $rawfile('index.html'), controller: this.controller })

controller:

  • forward:前进
  • backward:后退
  • refresh:刷新
  • stop:停止
  • clearHistory:清除历史
  • runJavaScript:原生页面调用H5页面
  • zoom(factor: number):设置网页缩放倍数,zoomAccess为true时才生效

属性:

  • fileAccess:设置是否开启通过$rawfile(filepath/filename)访问应用中rawfile路径的文件, 默认启用

  • javaScriptAccess:设置是否允许执行JavaScript脚本,默认允许执行

  • imageAccess:设置是否允许自动加载图片资源,默认允许

  • zoomAccess:设置是否支持手势进行缩放,默认允许执行缩放

  • textZoomAtio:设置页面的文本缩放百分比,默认100,表示100%

事件:

  • onConfirm事件,网页调用confirm()告警时触发此回调

onConfirm(callback: (event?: { url: string; message: string; result: JsResult }) => boolean)

参数:

  • url:当前显示弹窗所在网页的URL
  • message:弹窗中显示的信息
  • result:通知Web组件用户操作行为

返回值:

  • 当回调返回true时,可以调用系统弹窗能力(包括确认和取消),如自定义弹窗AlertDialog.show
  • 返回false时,触发默认弹窗
  • onAlert
  • onBeforeUnload
  • onConsole

总结:

        可以通过runJavaScript执行H5方法,H5页面处理完成之后调用confirm方法,原生页面会回调onConfirm事件,在这个回调事件中做一些逻辑处理,这样就完成了原生界面和H5页面的交互

三、Web和JavaScript交互

如果需要加载的网页在Web组件中运行JavaScript,则必须为Web组件启用JavaScript功能,默认情况下是允许JavaScript执行的

Web({ src:'https://www.baidu.com', controller:this.controller })
    .javaScriptAccess(true)

Web组件调用JS方法

可以在Web组件中使用runJavaScript方法调用JS方法

 this.controller.runJavaScript({script: 'test()',callback: (result: string)=> {this.webResult = result;}});

调用HTML文件中的test方法并将结果返回给Web组件

JS调用Web组件方法

可以使用registerJavaScriptProxy将Web组件中的JavaScript对象注入到window对象中,这样网页中的JS就可以直接调用该对象了

要想registerJavaScriptProxy方法生效,须调用refresh方法

原生调用:

@Entry
@Component
struct WebPage {@State dataFromHtml: string = ''controller: WebController = new WebController()testObj = {test: (data) => {this.dataFromHtml = datareturn 'ArkUI Web Component';},toString: () => {console.log('Web Component toString');}}build() {Column() {Text(this.dataFromHtml).fontSize(20)Row() {Button('Register JavaScript To Window').onClick(() => {this.controller.registerJavaScriptProxy({object: this.testObj,name: 'objName',methodList: ['test', 'toString'],});this.controller.refresh();})}Web({ src: $rawfile('index.html'), controller: this.controller }).javaScriptAccess(true)}}
}

html代码:

<!DOCTYPE html>
<html>
<meta charset="utf-8">
<body>
<button onclick="htmlTest()">调用Web组件里面的方法</button>
</body>
<script type="text/javascript">function htmlTest() {str = objName.test("param from Html");}
</script>
</html>

四、案例

@Entry
@Component
struct WebPage {controller: WebController = new WebController();build() {Row() {Row({ space: 10 }) {Button('前进').onClick(() => {this.controller.forward()})Button('后退').onClick(() => {this.controller.backward()})Button('执行').onClick(() => {//原生页面调用H5页面  test():是定义在Html网页中的方法this.controller.runJavaScript({ script: 'test()', callback: () => {} })})}.width('100%').height(50)Column() {Web({ src: 'https://www.baidu.com/', controller: this.controller }).onConfirm((event) => {//输入回调函数的参数let url = event.urllet message = event.messagelet result = event.result//显示自定义弹框AlertDialog.show({ title: '', message: '--' + message })return true})}.width('100%')}.height('100%')}
}


http://www.ppmy.cn/news/1298625.html

相关文章

kubeSphere DevOps自定义容器环境JDK11

kubeSphere DevOps自定义容器环境JDK11 &#x1f342;前言&#x1f342;增加JDK11容器环境&#x1f341;检查是否成功 &#x1f342;不生效的原因排查&#x1f341;按步骤执行如下命令 &#x1f342;前言 kubeSphere 版本v3.1.1 遇到问题:kubeSphere默认支持容器只有JDK8,目前…

2024年1月9日学习总结

目录 学习目标学习内容联邦学习基础&#xff1a;why, what, howwhy&#xff1f;what&#xff1f;how&#xff1f; 联邦学习的例子——CIFAR-10数据集&#xff08;分类问题&#xff09;1、import libararies2、hyper-parameters3、加载并且划分数据4、创建神经网络模型5、helper…

单机部署Rancher

上次已经安装完毕了k8s了&#xff0c;但是想要界面化的管理&#xff0c;离不开界面工具&#xff0c;首推就是rancher&#xff0c;本文介绍安装rancher的安装&#xff0c;也可以将之前安装的k8s管理起来。 已经安装完毕docker和docker-ce的可以直接从第三部分开始。 一、基础准…

「Movie-web」一个非常简洁独特的电影网站开源项目

前言 movie-web 是一个基于 React 和 Node.js 的电影信息网站项目&#xff0c;旨在为用户提供方便快捷的电影信息浏览和搜索功能。 该项目采用现代化的前端技术和后端技术&#xff0c;为用户提供良好的用户体验和稳定的服务。 项目介绍 movie-web 是一款在 GitHub 上开源的一…

react项目运行卡在编译:您当前运行的TypeScript版本不受@TypeScript eslint/TypeScript estree的官方支持

1.问题 错误信息具体如下&#xff1a; 搜索了一下&#xff0c;是typescript版本的问题&#xff0c;提示我版本需要在3.3.0和4.5.0中间&#xff0c;我查看了package.json&#xff0c;显示版本为4.1.3&#xff0c;然后一直给我提示我的版本是4.9.5&#xff0c;全局搜索一下&…

给大家带来三个图片格式转换工具以及步骤

在处理图片时&#xff0c;我们经常需要将图片格式转换为JPG格式。JPG格式是一种常见的图片格式&#xff0c;它具有较好的压缩效果和兼容性&#xff0c;适用于各种不同的应用场景。下面将介绍如何将图片格式转换为JPG格式。 方法一&#xff1a;水印云工具 1. 打开我们的软件。…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux系统编程第六天-Linux信号(物联技术666)

更多配套资料CSDN地址:点赞+关注,功德无量。更多配套资料,欢迎私信。 物联技术666_嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记-CSDN博客物联技术666擅长嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记,等方面的知识,物联技术666关注机器学习,arm开发,物联网,嵌入式硬件,单片机…

宝藏项目记录

前端&#xff1a; Vben前端&#xff0c;后天管理模版项目&#xff0c;vue开箱即用 分析页 - Vben Admin (vvbin.cn) 芋道源码 JDK 8 Spring Boot 2.7.18 前后端后台管理系统 YunaiV/yudao-cloud: ruoyi-vue-pro 全新 Cloud 版本&#xff0c;优化重构所有功能。基于 Spring …