写点什么

鸿蒙 next 中 Web 的使用

作者:flfljh
  • 2024-12-18
    湖南
  • 本文字数:1842 字

    阅读完需:约 6 分钟

鸿蒙 next 中 Web 的使用全解析

鸿蒙 next 中的 Web 组件为开发者提供了强大的网页显示能力,其使用方式丰富多样,涵盖了从基础加载到多种功能设置的诸多方面。

1. 基本使用

  • 创建 Web 组件:通过Web接口创建,如Web({src: 'www.example.com', controller: this.controller}),其中src指定网页资源地址,controller用于控制 Web 组件。例如加载在线网页时,直接传入目标网址即可。

  • 控制器的使用:从 API Version 9 开始,建议使用WebviewController。在组件构建中创建WebviewController实例,用于管理 Web 组件的操作,如加载、刷新等。

2. 加载不同类型网页

  • 在线网页:在Web组件的src属性中直接传入在线网页地址,如Web({src: 'www.example.com', controller: this.controller})

  • 本地网页

  • ** 通过 $rawfile 方式**:适用于加载本地资源文件,如Web({src: $rawfile("index.html"), controller: this.controller})\

  • 通过 resources 协议:适用于加载带有 "#" 路由的链接,如Web({src: "resource://rawfile/index.html", controller: this.controller})

  • 加载沙箱路径下的本地资源文件:先通过GlobalContext获取沙箱路径,再构建文件路径进行加载,如let url = 'file://' + GlobalContext.getContext().getObject("filesDir") + '/index.html'; Web({src: url, controller: this.controller})

3. 隐私模式与渲染模式

  • 隐私模式:在Web组件中设置incognitoModetrue,可创建隐私模式的 webview,如Web({src: 'www.example.com', controller: this.controller, incognitoMode: true})

  • 渲染模式:从 API Version 12 开始,可通过renderMode属性设置渲染方式,RenderMode.ASYNC_RENDER表示自渲染(默认值),RenderMode.SYNC_RENDER表示支持统一渲染能力,如Web({src: 'www.example.com', controller: this.controller, renderMode: RenderMode.SYNC_RENDER})

4. 共享渲染进程

通过设置sharedRenderProcessToken属性,相同 token 的 Web 组件会优先尝试复用绑定的渲染进程,如Web({src: 'www.example.com', controller: this.controller, sharedRenderProcessToken: "111"})

5. 权限设置

  • 文档对象模型存储接口(DOM Storage API)权限:使用domStorageAccess方法设置,默认未开启,如Web({src: 'www.example.com', controller: this.controller}).domStorageAccess(true)

  • 应用中文件系统的访问权限:通过fileAccess方法设置,从 API version 12 开始默认不启用,如Web({src: 'www.example.com', controller: this.controller}).fileAccess(true)

  • 图片资源自动加载权限:使用imageAccess方法,默认允许自动加载图片,如Web({src: 'www.example.com', controller: this.controller}).imageAccess(true)

6. JavaScript 对象注入

通过javaScriptProxy方法将 JavaScript 对象注入到 window 对象中,以便在网页中调用,如:


class TestObj {    test(data1: string, data2: string, data3: string): string {        console.log("data1:" + data1);        console.log("data2:" + data2);        console.log("data3:" + data3);        return "AceString";    }    asyncTest(data: string): void {        console.log("async data:" + data);    }    toString(): void {        console.log('toString' + "interface instead.");    }}@Entry@Componentstruct WebComponent {    controller: webview.WebviewController = new webview.WebviewController();    testObj = new TestObj();    build() {        Column() {            Web({src: 'www.example.com', controller: this.controller})              .javaScriptAccess(true)              .javaScriptProxy({                    object: this.testObj,                    name: "objName"                });        }    }}
复制代码

7. 其他属性和方法

Web 组件还支持多种通用属性,如aspectRatiobackgroundColor等,用于设置组件的样式和布局。同时,也提供了诸如loadUrlrefresh等方法(部分已被标记为过时)用于动态操作 Web 组件。在使用过程中,需注意属性和方法的兼容性以及版本差异带来的变化。例如,某些属性在特定版本后默认值发生改变,或者某些方法被新的方法所替代,开发者需要根据实际情况进行选择和调整。


鸿蒙 next 中的 Web 组件提供了全面且灵活的网页处理能力,开发者可以根据具体需求,精确地配置和控制 Web 组件的行为,实现丰富多样的应用内网页展示和交互功能。


用户头像

flfljh

关注

还未添加个人签名 2024-10-29 加入

还未添加个人简介

评论

发布
暂无评论
鸿蒙next中Web的使用_flfljh_InfoQ写作社区