ArkWeb(方舟 Web)是鸿蒙开发里的 “瑞士军刀”,既能加载网页,又能和原生代码互动。今天咱们通过三个实战案例,看看它到底有多好玩!
绝招一:在原生应用里塞进一个 “万能网页”
想象一下,你的鸿蒙应用里有一个模块,能随时加载任意网页。比如做一个 “万能浏览器” 功能,用户输入网址就能看网页。用 ArkWeb 实现起来超简单:
typescript
import { webview } from '@kit.ArkWeb';

@Entry
@Component
struct BrowserApp {
@State url: string = 'https(有的平台不让放网页链接)://example.com(实在抱歉了)/news/123'; // 默认加载一个网页
private webController: webview.WebviewController = new webview.WebviewController();

build() {

Column() {
  // 地址栏和刷新按钮
  Row() {
    TextField(this.url) // 输入网址的文本框
      .width('80%')
      .margin(10);
    Button("刷新")
      .onClick(() => {
        this.webController.loadUrl(this.url); // 重新加载网页
      })
      .margin(10);
  }

  // 加载网页的区域
  Web({ 
    src: this.url, 
    controller: this.webController 
  })
  .onPageFinished((url) => {
    console.log(`网页加载完成:${url}`);
  })
  .height('80%'); // 占屏幕大部分高度
}

}
}
这段代码实现了一个简单的浏览器:用户在地址栏输入网址,点击刷新就能加载网页。Web组件会自动处理网页的渲染,你甚至不用关心网页的细节。
绝招二:让网页和原生 “对话”
有时候,你可能想让网页里的按钮触发原生功能。比如在一个电商应用里,网页显示商品详情,点击 “立即购买” 按钮时,用原生代码跳转到支付页面。ArkWeb 的 JavaScriptProxy 就能实现这种跨世界的沟通。
在网页的 HTML 里加一个按钮:
html
<button onclick="callNative()">立即购买</button>
<script>
function callNative() {

window.jsProxy.openPaymentPage(); // 调用原生方法

}
</script>

在鸿蒙原生代码里设置监听:
typescript
@Entry
@Component
struct WebWithNative {
private webController: webview.WebviewController = new webview.WebviewController();

build() {

Column() {
  Web({ 
    src: 'https(有的平台不让放网页链接)://example.com(实在抱歉了)/news/123', // 加载一个你想加载的网页
    controller: this.webController 
  })
}

}

// 初始化时设置JS接口
init() {

this.webController.jsProxy.setOrCreateJsApi('openPaymentPage', () => {
  // 跳转到原生支付页面
  console.log("打开支付页面");
  // 这里可以添加实际的跳转逻辑
});

}
}

这样一来,用户点击网页里的按钮,就能触发原生的支付流程,体验无缝衔接。
绝招三:用 ArkWeb 做一个 “混血” 小程序容器
如果你有一个现成的小程序,想在鸿蒙应用里运行,ArkWeb 可以当这个容器。比如,把小程序的 Web 资源加载到 ArkWeb 组件里,同时保留原生的底部导航栏。
typescript
@Entry
@Component
struct HybridApp {
private webController: webview.WebviewController = new webview.WebviewController();

build() {

Column() {
  // 加载小程序的Web内容
  Web({ 
    src: 'https(有的平台不让放网页链接)://example.com(实在抱歉了)/news/123', 
    controller: this.webController 
  })
  .height('80%');

  // 原生底部导航栏
  Row() {
    Button("首页").margin(10);
    Button("分类").margin(10);
    Button("我的").margin(10);
  }
  .backgroundColor('#F5F5F5')
  .padding(10);
}

}
}
这样,用户既能在上面的 Web 区域使用小程序,又能通过底部的原生按钮切换页面,就像在用一个纯原生应用一样。
开发技巧:让 ArkWeb 更好用的小秘诀
预加载网页,提升速度
用offscreen属性提前加载网页,用户点击时瞬间显示:
typescript
Web({
src: 'https(有的平台不让放网页链接)://example.com(实在抱歉了)/news/123',
controller: this.webController,
offscreen: true // 开启离屏加载
})

管理网页生命周期,节省内存
在组件销毁时关闭网页,避免内存泄漏:

onDestroy() {
this.webController.destroy();
}

调试网页代码,像原生一样方便
在 DevEco Studio 里,你可以直接用 DevTools 调试 ArkWeb 加载的网页,和调试普通网页一样简单。
少尉总结以下下:ArkWeb 让鸿蒙应用无所不能
ArkWeb 的强大之处在于它打破了原生和 Web 的界限,让开发者能轻松融合两者的优势。不管你是想做一个内置浏览器,还是让网页和原生互动,甚至运行现成的小程序,ArkWeb 都能帮你实现。它不仅提升了开发效率,还让应用的功能变得更加丰富多样。
如果你想让自己的鸿蒙应用脱颖而出,ArkWeb 绝对是你的秘密武器。赶紧动手试试吧,说不定你会发现更多有趣的玩法!

本文由认元学横发布!转载请联系。

认元学横
1 声望0 粉丝