当前位置:   article > 正文

【鸿蒙 HarmonyOS 4.0】Web组件_鸿蒙4.0 webview

鸿蒙4.0 webview

一、介绍

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

二、加载网页

2.1、加载在线网页

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

  1. import webview from '@ohos.web.webview'
  2. @Entry
  3. @Component
  4. struct WebPage {
  5. private controller:WebviewController = new webview.WebviewController
  6. build() {
  7. Column(){
  8. Web({src:'https://blog.csdn.net/weixin_71403100?spm=1000.2115.3001.5343',controller:this.controller})
  9. }
  10. }
  11. }

代码运行效果图如下:

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

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

  1. {
  2. "module" : {
  3. "requestPermissions":[
  4. {
  5. "name": "ohos.permission.INTERNET"
  6. }
  7. ]
  8. }
  9. }

2.2、加载本地网页

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

  1. import webview from '@ohos.web.webview'
  2. @Entry
  3. @Component
  4. struct WebPage {
  5. private controller:WebviewController = new webview.WebviewController
  6. build() {
  7. Column(){
  8. Web({src:$rawfile('index.html'),controller:this.controller})
  9. }
  10. }
  11. }

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

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <style>
  8. p{
  9. font-size: 50px;
  10. text-align: center;
  11. color: red;
  12. }
  13. </style>
  14. </head>
  15. <body>
  16. <p>Hello World</p>
  17. </body>
  18. </html>

代码运行效果图如下:

三、网页缩放

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

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

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

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

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

四、处理页面导航

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

  1. import webview from '@ohos.web.webview'
  2. @Entry
  3. @Component
  4. struct WebPage {
  5. private controller:WebviewController = new webview.WebviewController
  6. build() {
  7. Column(){
  8. Row(){
  9. Button('前进').onClick(()=>this.controller.forward())
  10. Button('后退').onClick(()=>this.controller.backward())
  11. Button('刷新').onClick(()=>this.controller.refresh())
  12. Button('停止').onClick(()=>this.controller.stop())
  13. Button('清除历史').onClick(()=>this.controller.clearHistory())
  14. }
  15. .padding(12)
  16. .backgroundColor(Color.Gray)
  17. .width('100%')
  18. Web({src:'https://developer.harmonyos.com/',controller:this.controller})
  19. }
  20. .height('100%')
  21. }
  22. }

五、Web和JavaScript交互

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

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

5.1、启用JavaScript

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

5.2、Web组件调用JS方法

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

  1. import webview from '@ohos.web.webview'
  2. @Entry
  3. @Component
  4. struct WebPage {
  5. private controller:WebviewController = new webview.WebviewController
  6. build() {
  7. Column(){
  8. Button('获取js中的方法').onClick(()=>{
  9. this.controller.runJavaScript('getUserInfo()',(err,res)=>{
  10. if(!err){
  11. console.log('lucy',res)
  12. }
  13. })
  14. })
  15. Web({src:$rawfile('login.html'),controller:this.controller})
  16. .javaScriptAccess(true)
  17. }
  18. .height('100%')
  19. }
  20. }

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

5.3、JS调用Web组件方法

  1. import webview from '@ohos.web.webview'
  2. @Entry
  3. @Component
  4. struct WebPage {
  5. private controller:WebviewController = new webview.WebviewController
  6. build() {
  7. Column(){
  8. Button('注册信息到js中').onClick(()=>{
  9. this.controller.registerJavaScriptProxy({
  10. getAuth:()=>JSON.stringify({username:'tom',password:'123'})
  11. },'windowarkTs',['getAuth'])
  12. this.controller.refresh()
  13. })
  14. Web({src:$rawfile('login.html'),controller:this.controller})
  15. .javaScriptAccess(true)
  16. }
  17. .height('100%')
  18. }
  19. }
  1. //login.js文件代码
  2. username.value = JSON.parse(windowarkTs.getAuth()).username
  3. password.value = JSON.parse(windowarkTs.getAuth()).password
  4. const handlelogin = () => {
  5. console.log(`lucy--用户名---${username.value}`);
  6. console.log(`lucy--密码---${password.value}`);
  7. }
  8. const getUserInfo = ()=>{
  9. return {
  10. username:username.value,
  11. password:password.value
  12. }
  13. }

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

最后: 本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/306997?site

推荐阅读
相关标签