【鸿蒙 HarmonyOS 4.0】Web组件

一、介绍

页面加载是Web组件的基本功能。根据页面加载数据来源可以分为三种常用场景,包括加载网络页面、加载本地页面、加载HTML格式的富文本数据。

二、加载网页

2.1、加载在线网页

Web组件的使用非常简单,只需要在Page目录下的ArkTS文件中创建一个Web组件,传入两个参数就可以了。其中src指定引用的网页路径,controller为组件的控制器,通过controller绑定Web组件,用于实现对Web组件的控制。

import webview from '@ohos.web.webview'
@Entry
@Component
struct WebPage {private controller:WebviewController = new webview.WebviewControllerbuild() {Column(){Web({src:'https://blog.csdn.net/weixin_71403100?spm=1000.2115.3001.5343',controller:this.controller})}}
}

代码运行效果图如下:

备注:预览器是打不开此页面的,需要使用本地模拟器或真机调试

访问在线网页时您需要在module.json5文件中申明网络访问权限:ohos.permission.INTERNET。

{"module" : {"requestPermissions":[{"name": "ohos.permission.INTERNET"}]}
}

2.2、加载本地网页

前面实现了Web组件加载在线网页,Web组件同样也可以加载本地网页。首先在main/resources/rawfile目录下创建一个HTML文件,然后通过$rawfile引用本地网页资源,示例代码如下:

import webview from '@ohos.web.webview'
@Entry
@Component
struct WebPage {private controller:WebviewController = new webview.WebviewControllerbuild() {Column(){Web({src:$rawfile('index.html'),controller:this.controller})}}
}

 main/resources/rawfile目录下创建的HTML文件代码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>p{font-size: 50px;text-align: center;color: red;}</style>
</head>
<body><p>Hello World</p>
</body>
</html>

代码运行效果图如下:

三、网页缩放

有的网页可能不能很好适配手机屏幕,需要对其缩放才能有更好的效果,可以根据需要给Web组件设置zoomAccess属性,zoomAccess用于设置是否支持手势进行缩放,默认允许执行缩放。Web组件默认支持手势进行缩放。

Web({ src:'www.example.com', controller:this.controller }).zoomAccess(true)

如果需要对文本进行缩放,可以使用textZoomAtio(textZoomAtio: number)方法。其中textZoomAtio用于设置页面的文本缩放百分比,默认值为100,表示100%,以下示例代码将文本放大为原来的1.5倍。

Web({ src:'www.example.com', controller:this.controller }).textZoomAtio(150)

从上面的效果图可以看出使用textZoomAtio,文本会放大,但是图片不会随着文本一起放大。

四、处理页面导航

在使用浏览器浏览网页时,可以执行返回、前进、刷新等操作,Web组件同样支持这些操作。

import webview from '@ohos.web.webview'
@Entry
@Component
struct WebPage {private controller:WebviewController = new webview.WebviewControllerbuild() {Column(){Row(){Button('前进').onClick(()=>this.controller.forward())Button('后退').onClick(()=>this.controller.backward())Button('刷新').onClick(()=>this.controller.refresh())Button('停止').onClick(()=>this.controller.stop())Button('清除历史').onClick(()=>this.controller.clearHistory())}.padding(12).backgroundColor(Color.Gray).width('100%')Web({src:'https://developer.harmonyos.com/',controller:this.controller})}.height('100%')}
}

五、Web和JavaScript交互

在开发专为适配Web组件的网页时,您可以实现Web组件和JavaScript代码之间的交互。Web组件可以调用JavaScript方法,JavaScript也可以调用Web组件里面的方法。

在main/resources/rawfile目录下创建login.html、login.css、login.js文件

5.1、启用JavaScript

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

5.2、Web组件调用JS方法

点击按钮添加runJavaScript方法,事件是网页加载完成时的回调,runJavaScript方法可以执行HTML中的JavaScript脚本。

import webview from '@ohos.web.webview'
@Entry
@Component
struct WebPage {private controller:WebviewController = new webview.WebviewControllerbuild() {Column(){Button('获取js中的方法').onClick(()=>{this.controller.runJavaScript('getUserInfo()',(err,res)=>{if(!err){console.log('lucy',res)}})})Web({src:$rawfile('login.html'),controller:this.controller}).javaScriptAccess(true)}.height('100%')}
}

当页面加载完成时,触发点击事件,调用HTML文件中的getUserInfo()方法并将结果返回给Web组件。

5.3、JS调用Web组件方法

import webview from '@ohos.web.webview'
@Entry
@Component
struct WebPage {private controller:WebviewController = new webview.WebviewControllerbuild() {Column(){Button('注册信息到js中').onClick(()=>{this.controller.registerJavaScriptProxy({getAuth:()=>JSON.stringify({username:'tom',password:'123'})},'windowarkTs',['getAuth'])this.controller.refresh()})Web({src:$rawfile('login.html'),controller:this.controller}).javaScriptAccess(true)}.height('100%')}
}
//login.js文件代码
username.value = JSON.parse(windowarkTs.getAuth()).username
password.value = JSON.parse(windowarkTs.getAuth()).passwordconst handlelogin = () => {console.log(`lucy--用户名---${username.value}`);console.log(`lucy--密码---${password.value}`);
}const getUserInfo = ()=>{return {username:username.value,password:password.value}
}

点击按钮时,直接将getAuth里面的信息注册到js中

最后:👏👏😊😊😊👍👍  

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

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

相关文章

程序人生——Java泛型和反射的使用建议

目录 引出泛型和反射建议93&#xff1a;Java的泛型是类型擦除的建议94&#xff1a;不能初始化泛型参数和数组建议95&#xff1a;强制声明泛型的实际类型 建议96&#xff1a;不同的场景使用不同的泛型通配符建议97&#xff1a;警惕泛型是不能协变和逆变的 建议98&#xff1a;建议…

【嵌入式实践】【芝麻】【硬件篇-3】从0到1给电动车添加指纹锁:光耦+继电器电路设计及讲解

0. 前言 该项目是基于stm32F103和指纹模块做了一个通过指纹锁控制电动车的小工具。支持添加指纹、删除指纹&#xff0c;电动车进入P档等待时计时&#xff0c;计时超过5min则自动锁车&#xff0c;计时过程中按刹车可中断P档状态&#xff0c;同时中断锁车计时。改项目我称之为“芝…

【Poi-tl Documentation】自定义行删除标签

前置说明&#xff1a; <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.1</version> </dependency>模板样式&#xff1a; 删除行表格测试.docx 实现思路&#xff1a;通过定制占位…

Linux操作系统裸机开发-环境搭建

一、配置SSH服务 1、下载安装ssh服务输入以下命令 sudo apt-get install nfs-kernel-server portmap2、建立一个供SSH服务使用的文件夹如以下命令 mkdir linux 3、完成前两步之后需要将其文件路径放到/etc/exports文件里输入以下命令&#xff1a; sudo vi /etc/esports 4.打…

基于springboot+vue实现疫情防控物资调配系统项目【项目源码】计算机毕业设计

基于springbootvue实现疫情防控物资调配系统演示 B/S结构的介绍 在确定了项目的主题和研究背景之后&#xff0c;就要确定本系统的架构了。主流的架构有两种&#xff0c;一种是B/S架构&#xff0c;一种是C/S架构。C/S的全称是Client/Server&#xff0c;Client是客户端的意思&am…

javaEE——线程的等待和结束

文章目录 Thread 类及常见方法启动一个线程中断一个线程变量型中断调用 interrupt() 方法来通知观察标志位是否被清除 等待一个线程获取当前线程引用休眠当前线程 线程的状态观察线程的所有状态观察 1: 关注 NEW 、 RUNNABLE 、 TERMINATED 状态的切换 多线程带来的风险为什么会…

[善用佳软]推荐掌握小工具:Json解析的命令行工具jq

前言&#xff1a; 我们在各种生产环境或者开发测试环境中&#xff0c;一定遇到有很多信息都是使用JSON串或者文本文件作为输入的。在没有JQ命令行工具之前&#xff0c;我们要从中获取真正的输入&#xff0c;大都把它复制到文本里头&#xff0c;然后使用文本编辑器进行加工整理…

TinyEMU之Linux Kernel编译

TinyEMU之Linux Kernel编译 1 准备工作2 安装RISC-V交叉编译器3 编译Linux Kernel4 镜像格式转换 本文属于《 TinyEMU模拟器基础系列教程》之一&#xff0c;欢迎查看其它文章。 1 准备工作 我们需要&#xff0c;下载以下内容。 编译好的RISC-V交叉编译器&#xff1a;riscv64-…

边缘计算网关的工作原理及其在工业领域的应用价值-天拓四方

随着物联网技术的快速发展&#xff0c;物联网时代已经悄然来临。在这个时代&#xff0c;数以亿计的设备相互连接&#xff0c;共享数据&#xff0c;共同构建智慧的世界。边缘计算网关通过将计算能力和数据存储推向网络的边缘&#xff0c;实现了对海量数据的实时处理&#xff0c;…

Vue命令式组件的编写与应用

目录 1.引言 2.传统的组件 3.命令式组件 4.命令式组件的应用场景 1.引言 大家好&#xff01;今天我们来聊聊Vue.js中的一个有趣话题——命令式组件。你有没有觉得&#xff0c;有时候我们在Vue模板里写组件&#xff0c;就像是在玩搭积木&#xff0c;每个积木都有固定的形状…

什么又是线程呢??

线程&#xff1a; 线程可以并发的执行&#xff0c;但是线程的地址是可以共享的 进程与线程的比较&#xff1a; 进程>线程 线程分三种&#xff1a; 用户线程 只有用户程序的库函数来 用户线程 因为操作系统感知不到 线程&#xff0c;如果有线程在运行&#xff0c;然后不交…

Doris基本SQL语句(官方使用指南轻量化)

Doris 采用 MySQL 协议进行通信&#xff0c;用户可通过 MySQL client 或者 MySQL JDBC连接到 Doris 集群。 选择 MySQL client 版本时建议采用5.1 之后的版本&#xff0c;因为 5.1 之前不能支持长度超过 16 个字符的用户名。 #修改root密码 mysql> SET PASSWORD FOR root P…