Harmonyos之加载本地web页面

本地文件存放位置

resources资源文件下的rawfile目录

第一种是放在src\main\resources\rawfile文件夹下,在ets文件中通过$rawfile('文件名')访问
在这里插入图片描述

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

resources资源文件下的自定义目录

我们也可以把h5文件访问到src\main\resources\目录下的自定目录

在这里插入图片描述
加载方式:

// 获取本地h5的资源路径,可以凭借h5链接需要的参数
  @State url: string = "file://" + getContext().resourceDir + "/uatfile/index.html#/"+"?accessToken="+this.acct+"&userName="+this.user_name

Web({
   
    src: '', controller: this.controller })
        .onlineImageAccess(true)
        .imageAccess(true)
        .darkMode(this.mode)
        .domStorageAccess(true)//开启文档对象模型存储接口
        .javaScriptAccess(true)//允许执行JavaScript脚本
        .javaScriptProxy({
   
   
          object: new HippiusBridge(this.controller),
          name: "xxxx",
          methodList: ["postMessage"],
          controller: this.controller
        })
        .fileAccess(true)//开启应用中文件系统的访问
        .mixedMode(MixedMode.All)//允许加载超文本传输协议(HTTP)和超文本传输安全协议(HTTPS)混合内容
        .focusOnTouch(false)
        .metaViewport(true)//设置meta标签的viewport属性是否可用
        .onControllerAttached(() => {
   
   
          //当Controller成功绑定到Web组件时触发该回调
          // 推荐在此loadUrl、设置自定义用户代理、注入JS对象等
          if (this.url) {
   
   
            console.info('[ ~~ mwebview onControllerAttached~~  ]  : ' +this.url.toString());
            this.controller.setPathAllowingUniversalAccess([
              getContext().resourceDir,
              getContext().resourceDir+"/uatfile"
            ])

            try {
   
   
              let userAgent = this.controller.getUserAgent() + this.customUserAgent;
              this.controller.setCustomUserAgent(userAgent)
            } catch (error) {
   
   
              console.error(`ErrorCode: ${
   
   (error as BusinessError).code},  Message: ${
   
   (error as BusinessError
HarmonyOS NEXT 中,使用 Web 组件加载本地 HTML 页面是一种常见的需求,适用于展示本地资源或静态内容。以下是几种实现方式及相关代码示例。 ### 3.1 使用 `$rawfile` 加载本地 HTML 文件 最直接的方法是将 HTML 文件放置在 `resources/rawfile` 目录下,并通过 `$rawfile()` 函数引用该文件路径,然后将其作为 `Web` 组件的 `src` 属性值。 ```typescript import webview from '@ohos.web.webview'; @Entry @Component struct WebPage { private controller: webview.WebviewController = new webview.WebviewController(); build() { Column() { // 加载位于 resources/rawfile 下的 index.html 文件 Web({ src: $rawfile('index.html'), controller: this.controller }) } } } ``` 上述代码中,`$rawfile('index.html')` 表示从 `resources/rawfile` 目录加载名为 `index.html` 的文件[^3]。 ### 3.2 动态加载 HTML 字符串(Data URL) 如果希望不依赖外部文件,而是直接在代码中嵌入 HTML 内容,可以使用 Data URL 的方式。这种方式适合加载小型 HTML 内容。 ```typescript import { webview } from '@kit.ArkWeb'; import { BusinessError } from '@kit.BasicServicesKit'; @Entry @Component struct WebComponent { controller: webview.WebviewController = new webview.WebviewController(); htmlStr: string = "data:text/html,<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>"; build() { Column() { Web({ src: this.htmlStr, controller: this.controller }) } } } ``` 此方法通过字符串构造 HTML 内容并以 Data URL 形式传递给 Web 组件,适用于动态生成的页面内容[^2]。 ### 3.3 结合按钮事件切换本地页面 还可以结合用户交互操作来加载不同的本地 HTML 页面,例如点击按钮切换到另一个 HTML 页面。 ```typescript import { webview } from '@kit.ArkWeb'; import { BusinessError } from '@kit.BasicServicesKit'; @Entry @Component struct WebComponent { controller: webview.WebviewController = new webview.WebviewController(); build() { Column() { Button('Load local1.html') .onClick(() => { try { // 点击按钮时加载 local1.html this.controller.loadUrl($rawfile("local1.html")); } catch (error) { console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); } }) // 初始加载 local.html Web({ src: $rawfile("local.html"), controller: this.controller }) } } } ``` 在此示例中,初始加载的是 `local.html`,点击按钮后会加载 `local1.html`。这种方式允许用户通过界面操作控制 Web 组件加载不同页面[^4]。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值