【鸿蒙 HarmonyOS 4.0】Web组件

news2024/11/18 4:32:38

一、介绍

页面加载是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.WebviewController

  build() {
   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.WebviewController

  build() {
   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.WebviewController

  build() {
   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.WebviewController

  build() {
   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.WebviewController

  build() {
   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()).password

const handlelogin = () => {
    console.log(`lucy--用户名---${username.value}`);
    console.log(`lucy--密码---${password.value}`);
}

const getUserInfo = ()=>{
    return {
        username:username.value,
        password:password.value
    }
}

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

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

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

相关文章

ArcGIS学习(十六)基于交通网络的城市情景分析

ArcGIS学习(十六)基于交通网络的城市情景分析 本任务给大家带来一个非常重要的内容一一基于交通网络的城市情景分析。基于交通网络模拟交通出行并进行相关分析是ArcGIS里面一种常用的分析方法,大家一定要掌握!本任务包括三个关卡: 交通网络模型构建基于交通网络模型的基本…

mysql show profile 简单使用

mysql官网 http://dev.mysql.com/doc/refman/ 1、是否支持&#xff0c;看看当前的mysql版本是否支持 show variables like profiling;2、开启功能&#xff0c;默认是关闭&#xff0c;使用前需要开启 set profilingon;3、运行sql 4、查看结果&#xff0c;show profiles; 5、…

Acer宏碁非凡Swift SFG16-71工厂模式原厂Win11系统,预装OEM系统恢复开箱状态

宏基笔记本电脑SFG16-71原装出厂Windows11系统安装工厂包下载&#xff0c;带恢复重置功能 链接&#xff1a;https://pan.baidu.com/s/1JK02kBbwKG_cIBNlEOzrOw?pwdzdfm 提取码&#xff1a;zdfm 原装工厂包系统自带所有驱动、Office办公软件、出厂时自带主题壁纸图片、系统…

Gitlab CICD 下载artifacts文件并用allure打开,或bat文件打开

allure命令行打开aritfacts报告 首先下载allure.zip&#xff0c;并解压 配置环境变量 使用命令行打开allure文件夹 allure open 2024-03-11-14-54-40 2024-03-11-14-54-40 包含index.html Bat文件打开artifacts There are 2 html reports in the download artifacts.zip S…

排序类算法

目录 一、交换类排序 1.冒泡排序 2.快速排序 二、 插入排序 1.直接插入排序 2.折半插入排序 3.希尔排序 三、选择排序 1.简单选择排序 2.堆排序 完整代码 四、归并排序 完整代码 五、汇总 六、OJ练习 1.冒泡排序&#xff1a;正确表示前一个数和后一个数 2.选…

Transformer模型引领NLP革新之路

在不到4 年的时间里&#xff0c;Transformer 模型以其强大的性能和创新的思想&#xff0c;迅速在NLP 社区崭露头角&#xff0c;打破了过去30 年的记录。BERT、T5 和GPT 等模型现在已成为计算机视觉、语音识别、翻译、蛋白质测序、编码等各个领域中新应用的基础构件。因此&#…

2、功能安全入门之ISO26262说人话版本GB_T 34590

目录 0. 一些功能安全资料 1. 什么是功能安全? 1.1 安全三剑客 1.2 功能安全如何解决问题: 2. ISO26262说人话版本 3-5 相关项 3-7 危害分析和风险评估 3-8功能安全方案 4-5 系统层面 5-5 硬件级产品开发 6-5 软件层面 6-6 软件架构安全设计要求 功能监控层安全…

嵌入式面经-ARM体系架构-计算机基础

嵌入式系统分层 操作系统的作用&#xff1a;向下管理硬件&#xff0c;向上提供接口&#xff08;API&#xff09; 应用开发&#xff1a;使用操作系统提供的接口&#xff08;API&#xff09;&#xff0c;做上层的应用程序开发&#xff0c;基本不用去关内核操作硬件是怎么实现的 …

数据库管理-第159期 Oracle Vector DB AI-10(20240311)

数据库管理159期 2024-03-11 数据库管理-第159期 Oracle Vector DB & AI-10&#xff08;20240311&#xff09;1 其他distance函数2 实例演示使用其他函数寻找最近向量点函数变体简写语法 总结 数据库管理-第159期 Oracle Vector DB & AI-10&#xff08;20240311&#x…

02 THU大模型之 Neural Network

1 Neural Network 1.1 Neural Network Components Simple Neuron单个神经元 A neuron is a computational unit with n inputs and 1 output and parameters W(权重) , b 具体来说, 输入向量( Xi )和权重向量( Wi )进行点乘得到标量值, 标量值加上偏置值b后送入激活函数acti…

【机器学习】科学库使用第1篇:机器学习(常用科学计算库的使用)基础定位、目标【附代码文档】

机器学习&#xff08;科学计算库&#xff09;完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;机器学习&#xff08;常用科学计算库的使用&#xff09;基础定位、目标&#xff0c;机器学习概述&#xff0c;1.1 人工智能概述&#xff0c;1.2 人工智能发展历…

HCIA-Datacom题库(自己整理分类的)_54_聚合判断【8道题】

1.路由器的聚合端口可以配置路由器子接口。√ 2.Eth-Trunk 两端的负载分担模式可以不一致。√ 3.链路聚合接口只能作为二层接口。 4.在园区网络中通过使用链路聚合、堆叠技术可以提高网络可靠性。√ 5.园区网可以通过链路聚合和堆叠提高网络可靠性。√ 6.交换机通过堆叠、…

部署ELK日志分析系统

简介 在大型运维环境中&#xff0c;管理员通常面对大量的服务器&#xff0c;对于这些服务器的维护&#xff0c;一个很重要的工作就是查看每台服务器的日志信息&#xff0c;而每天逐台检查的方式显然效率比较低下。传统的方式是通过搭建日志服务器&#xff0c;将所有服务器的日志…

VB编程技术笔记

连续赋值 at:tb:ba 分支语句&#xff1a;

Python 导入Excel三维坐标数据 生成三维曲面地形图(面) 3、线条平滑曲面但有条纹

环境和包: 环境 python:python-3.12.0-amd64包: matplotlib 3.8.2 pandas 2.1.4 openpyxl 3.1.2 scipy 1.12.0 代码: import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from scipy.interpolate import griddata im…

C++之对象模型和this 指针,友元,和运算符重载

1&#xff0c;对象模型和this 指针 1.1成员变量和成员函数分开存储 在C中&#xff0c;类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 示例&#xff1a; #include<iostream> using namespace std;//成员变量 和 成员函数 分开存储 class Per…

Vue3全家桶 - Vue3 - 【6】组件(注册组件 + 组件通信 + 透传属性和事件 + 插槽 + 单文件CSS + 依赖注入)

组件 一、 注册组件 1.1 ❌ 全局注册 目标文件&#xff1a;main.js&#xff1b;语法&#xff1a;import { createApp } from vue import App from ./App.vue const app createApp(App)// 全局注册 app.component(组件名字, 需要注册组件)app.mount(#app)缺陷&#xff1a; 全…

怎样在CSDN赚点零花钱

请教一下各位大佬&#xff0c;看到你们在CSDN很多都几万粉丝以上&#xff0c;能不能分享一下有什么涨粉的经验&#xff0c;还有怎样转化为额外收益……感谢各位提供宝贵的经验&#xff0c;谢谢……

多目灰度cam手势追踪系统——MegaTrack

一、前言 本文是对Facebook Oculus发布的一篇VR方向&#xff08;手势追踪&#xff09;论文的解读。Oculus是一家做VR的公司&#xff0c;2014年被FaceBook收购了&#xff0c;本次参考的论文就是FaceBook Oculus团队的最新论文。论文2020年7月发表于SIGGRAPH。 因为最终是要给大…

Go语言简介

一.Go语言简介 1.1 优点 自带gc静态编译&#xff0c;编译好后&#xff0c;扔服务器直接运行简单思想&#xff0c;没有继承&#xff0c;多态和类等丰富的库和详细开发文档语法层支持并发&#xff0c;和拥有同步并发的channel类型&#xff0c;使并发开发变得非常方便简洁语法&am…