鸿蒙开发在应用中加载Web网页&应用与Web之间通信

目录

鸿蒙应用中如何加载Web网页

加载网络页面

加载本地页面

Web跳转应用内页面

应用与web之间通信

应用调用web函数

应用提供函数给web调用


众所周知,我们在ArkTs开发移动端过程中,不可避免会用到网页,使用网页的时候或多或少需要用和web之间进行通信,那么鸿蒙开发中,如何加载网页,如何与Web网页进行通信

鸿蒙应用中如何加载Web网页

加载网络页面
import webview from '@ohos.web.webview'

@Entry
@Component
export struct WebViewComponent{
  //控制器对象
  controller:WebviewController = new webview.WebviewController()

  build(){
    Row(){
      //加载网络页面
      Web({src:'https://baidu.com',controller:this.controller})

    }.height('100%')
  }
}
加载本地页面

后续省略Page页面的模板代码,只展示核心代码

//加载本地网页
Web({src: $rawfile("debug.html"),controller:this.controller})
      

需要注意一点,本地网页的html文件需要放在rawfile文件夹下

Web跳转应用内页面

在遇到web触发跳转到应用内的时候,我们需要拦截跳转的URL,通过自定义协议头来分辨是跳转网页还是应用内的页面

Web端可以通过A标签添加:

<a href="native://pages/LoginPage">登录</a>

应用端需要使用拦截器 onUrlLoadIntercept 来拦截,例如:

 Web({src: $rawfile("debug.html"),controller:this.controller}).onUrlLoadIntercept(({data})=>{
        let url:string = data as string
        //验证是否要跳转到应用界面
        if(url.indexOf('native://')==0){
          console.log("跳转:"+url.substring(9));
          //跳转其他native页面
          router.pushUrl({url:url.substring(9)});
          return true;
        }
        return false;
      });

onUrlLoadIntercept :当URL加载被拦截时触发,如果返回true代表我们消费掉这个事件不进行后续操作,返回false代表不做处理继续往下执行,当然你还可以在这个方法里做一些其他的操作,比如拦截非法的超链。

应用与web之间通信

应用调用web函数
  Button('调用H5函数').onClick(()=>{
        //调用web
        this.controller.runJavaScript(`changeData('hello HarmonyOS')`)
      })

前提是web函数中提供了changeData函数,注意runJavaScript括号里的最外层的符号是``不是‘’

如果函数不需要携带参数直接调函数名即可

应用提供函数给web调用

相当于是把提供给web调用的函数提前准备好,在加载web页面的时候通过javaScriptProxy将方法名注入进去,这样web端就可以调用changeData给应用提供信息了

 ///注入,给web提供访问对象
      Web({src: $rawfile("test.html"),controller:this.controller})
        .javaScriptProxy({
          object:{///注入对象
            changeData:(val)=>{//注意this的指向
              this.text = val;
            }
          },
          methodList:['changeData'],//指定让web页面访问的方法
          name:'app',//web页面访问的变量名
          controller:this.controller
        })

有些web同学可能不知道如何使用,那么以下web端代码:

<button id="call">调用app的方法</button>

<script>
   
    let call =document.querySelector("#call");
     call.onclick=()=>{
     //调用应用的方法
        app.changeData("hello Harmony")
     }
</script>

后续会持续更新鸿蒙开发相关的知识,如果我的内容帮助到了你,麻烦你点个关注留个言,收藏一下。

在 HarmonyOS 中实现混合开发(Hybrid Development)是一种结合原生应用Web 应用开发模式,能够充分发挥两者的优势。通过集成 Web 技术,开发者可以在鸿蒙系统中构建具有动态内容、跨平台兼容性和灵活更新能力的应用程序。 ### 使用 Web 组件加载网页内容 HarmonyOS 提供了 `Web` 组件,允许开发者将 Web 内容嵌入到应用中。例如,可以通过 ArkTS 编写的代码加载本地 HTML 文件或远程 URL: ```typescript // 从 &#39;@kit.ArkWeb&#39; 模块中导入 webview 对象 import { webview } from &#39;@kit.ArkWeb&#39; @Entry @Component struct HybridApp { // 创建一个 webview.WebviewController 实例,用于控制 Web 视图 webViewController: webview.WebviewController = new webview.WebviewController() build() { Column() { Web({ // src 属性指定要加载Web 内容源,可以是本地文件或远程 URL src: $rawfile(&#39;index.html&#39;), // controller 属性关联之前创建的 webview.WebviewController 实例 controller: this.webViewController }) } } } ``` 上述代码展示了如何使用 `Web` 组件加载本地的 `index.html` 文件[^3]。如果需要加载远程网页,只需将 `src` 替换为有效的 URL 字符串即可。 ### Web 内容原生组件的交互 混合开发的核心优势之一是 Web 内容原生组件之间的双向通信。HarmonyOS 支持通过 JavaScript 接口调用原生方法,同时也可以从原生端调用 Web 页面中的 JavaScript 函数。 #### 原生端调用 Web 端函数 可以使用 `webViewController.evaluateJavaScript()` 方法执行页面中的 JavaScript 代码: ```typescript this.webViewController.evaluateJavaScript(&quot;document.title&quot;, (value: string) =&gt; { console.info(&quot;当前页面标题:&quot; + value) }) ``` #### Web 端调用原生功能 在 Web 页面中,可以通过特定的桥接机制调用原生 API。例如,定义一个 JavaScript 函数来触发原生弹窗提示: ```javascript function callNativeAlert(message) { window.arknative.postMessage({ action: &quot;showToast&quot;, data: message }); } ``` 然后,在 ArkTS 中监听来自 Web 的消息并处理: ```typescript this.webViewController.onMessageEvent((event) =&gt; { if (event.action === &quot;showToast&quot;) { alert(event.data) } }) ``` ### 混合开发应用场景 - **动态内容展示**:适用于需要频繁更新 UI 的场景,如新闻资讯、营销活动页等。 - **跨平台一致性**:利用 Web 技术编写一次,可在多个设备上运行,减少重复开发成本。 - **热更新快速迭代**:无需发布新版本即可更新 Web 部分内容,提升用户体验和维护效率。 ### 开发建议 - **性能优化**:对于复杂动画或高性能需求场景,建议优先使用原生组件,而将 Web 技术用于静态或低交互性内容。 - **安全性考虑**:确保 Web 内容来源可信,并限制不必要的权限访问。 - **多端适配**:利用 HarmonyOS 的响应式布局能力,确保 Web 内容在不同屏幕尺寸下良好显示。 通过以上方式,可以在 HarmonyOS 中高效地集成 Web 技术,实现灵活的混合开发方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值