HarmonyOS 管理页面跳转及浏览记录导航

历史记录导航

使用者在前端页面点击网页中的链接时,Web 组件默认会自动打开并加载目标网址。当前端页面替换为新的加载链接时,会自动记录已经访问的网页地址。可以通过forward()和backward()接口向前/向后浏览上一个/下一个历史记录。

在下面的示例中,点击应用的按钮来触发前端页面的后退操作。

复制代码
// xxx.etsimport web_webview from '@ohos.web.webview';
@Entry@Componentstruct WebComponent {  webviewController: web_webview.WebviewController = new web_webview.WebviewController();  build() {    Column() {      Button('loadData')        .onClick(() => {          if (this.webviewController.accessBackward()) {            this.webviewController.backward();            return true;          }        })      Web({ src: 'https://www.example.com/cn/', controller: this.webviewController})    }  }}

如果存在历史记录,accessBackward()接口会返回 true。同样,您可以使用accessForward()接口检查是否存在前进的历史记录。如果您不执行检查,那么当用户浏览到历史记录的末尾时,调用forward()和backward()接口时将不执行任何操作。

页面跳转

当点击网页中的链接需要跳转到应用内其他页面时,可以通过使用 Web 组件的onUrlLoadIntercept()接口来实现。

在下面的示例中,应用首页 Index.ets 加载前端页面 route.html,在前端 route.html 页面点击超链接,可跳转到应用的 ProfilePage.ets 页面。

● 应用首页 index.ets 页面代码。

复制代码
// index.etsimport web_webview from '@ohos.web.webview';import router from '@ohos.router';@Entry@Componentstruct WebComponent {  webviewController: web_webview.WebviewController = new web_webview.WebviewController();
  build() {    Column() {      Web({ src: $rawfile('route.html'), controller: this.webviewController })        .onUrlLoadIntercept((event) => {          let url: string = event.data as string;          if (url.indexOf('native://') === 0) {            // 跳转其他界面            router.pushUrl({ url:url.substring(9) })            return true;          }          return false;        })    }  }}

● route.html 前端页面代码。

复制代码
<!-- route.html --><!DOCTYPE html><html><body>  <div>      <a href="native://pages/ProfilePage">个人中心</a>   </div></body></html>

● 跳转页面 ProfilePage.ets 代码。

复制代码
@Entry@Componentstruct ProfilePage {  @State message: string = 'Hello World';
  build() {    Column() {      Text(this.message)        .fontSize(20)    }  }}

跨应用跳转

Web 组件可以实现点击前端页面超链接跳转到其他应用。

在下面的示例中,点击 call.html 前端页面中的超连接,跳转到电话应用的拨号界面。

● 应用侧代码。

复制代码
// xxx.etsimport web_webview from '@ohos.web.webview';import call from '@ohos.telephony.call';
@Entry@Componentstruct WebComponent {  webviewController: web_webview.WebviewController = new web_webview.WebviewController();
  build() {    Column() {      Web({ src: $rawfile('xxx.html'), controller: this.webviewController})        .onUrlLoadIntercept((event) => {          let url: string = event.data as string;          // 判断链接是否为拨号链接          if (url.indexOf('tel://') === 0) {            // 跳转拨号界面            call.makeCall(url.substring(6), (err) => {              if (!err) {                console.info('make call succeeded.');              } else {                console.info('make call fail, err is:' + JSON.stringify(err));              }            });            return true;          }          return false;        })    }  }}

● 前端页面 call.html 代码。

复制代码
<!-- call.html --><!DOCTYPE html><html><body>  <div>    <a href="tel://xxx xxxx xxx">拨打电话</a>  </div></body></html>
相关推荐
HwJack206 小时前
【共创稿事节】HarmonyOS 7空间信息层级:焦点、景深与注意力引导
3d·华为·harmonyos·空间计算
zhangfeng11339 小时前
Reward Hacking 奖励钻空子 / 奖励作弊 Specification Gaming(规范博弈)
人工智能·华为·ai编程·npu
特立独行的猫a11 小时前
用仓颉写一个 Tauri:IPC 的每次往返实现原理(web层到仓颉层的触发过程)
前端·ui·harmonyos·tauri·鸿蒙·仓颉
2501_9197490312 小时前
华为鸿蒙桌面时钟与悬浮时钟APP—小羊时钟
华为·harmonyos
HwJack2013 小时前
【共创稿事节】HarmonyOS 7空间交互综述:视线、头部、手势的协同
数码相机·交互·harmonyos
李游Leo14 小时前
HarmonyOS 7 ArkUI + Window Kit:折叠屏编辑页的键盘避让快照与焦点恢复时序【鸿蒙心迹】
华为·计算机外设·harmonyos
李游Leo15 小时前
HarmonyOS 7 HSP + Localization Kit:共享组件资源导出、语言回退与相对路径失效诊断【鸿蒙心迹】
harmonyos
m0_7381858215 小时前
Flutter 鸿蒙化实战:flutter_nfc_kit 适配 OpenHarmony,NFC 读写一步到位
flutter·华为·harmonyos·鸿蒙
垆边人似月.15 小时前
华为机考题:字符个数统计
数据结构·算法·华为
李游Leo15 小时前
HarmonyOS 7 TaskPool + Node-API + zstd:Native 批量压缩任务的主线程隔离、进度回传与资源收口【鸿蒙心迹】
java·华为·harmonyos