写点什么

Arkweb 如何正确加载 web 的当前 title?

  • 2026-04-14
    北京
  • 本文字数:1601 字

    阅读完需:约 5 分钟

本问答帖原创发布在华为开发者联盟社区 ,欢迎开发者前往论坛提问交流。

更多与该问题相关的讨论,请点击原帖查看:

Arkweb如何正确加载web的当前title-华为开发者问答 | 华为开发者联盟 (huawei.com)

问题描述:

使用 arkweb 时,onTitleReceive 获取 web 的 title 和 document.title 不一致的,应该如何正确加载 web 的当前 title?

解决方案:

【背景知识】

· Web组件:提供具有网页显示能力的 Web 组件,在显示网页时提供了多个事件用于获取网页信息,如:onTitleReceive网页 document 标题更改回调,可以在此事件中获取加载的网页的标题,当 H5 未设置 title 元素时会返回对应的 url。

· Webview:Webview 提供 Web 控制能力,如:通过getTitle获取当前网页的标题。

【解决方案】

· 方案一,在onTitleReceive或者onPageEnd中使用getTitle获取网页的标题。

· 方案二,通过runJavaScript执行 JavaScript 代码来获取文档的标题。

示例代码如下:

import webview from '@ohos.web.webview'; @Entry@Componentstruct Index {  wController: webview.WebviewController = new webview.WebviewController();  @State url: string = 'https://developer.huawei.com/consumer/cn/doc/'   build() {    Column() {      Column() {        Web({ src: this.url, controller: this.wController })          .fileAccess(true)          .javaScriptAccess(true)          .domStorageAccess(true)  //设置是否开启文档对象模型存储接口(DOM Storage API)权限,默认未开启。          .overviewModeAccess(true)          .verticalScrollBarAccess(false)          .onTitleReceive((event) => {            if (event) {              //方式一:在onTitleReceive回调中使用getTitle获取标题              console.info('onTitleReceive title: ', this.wController.getTitle());            }          })          .onPageEnd(() => {            //方式二:在onPageEnd回调中使用getTitle获取标题            console.info('onPageEnd title:', this.wController.getTitle())            //方式三:通过runJavaScript执行JavaScript脚本获取标题            //异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果            this.wController.runJavaScript('document.title', (error, result) => {              if (error) {                console.error(`Failed to do sth. Code is ${error.code}, message is ${error.message}`);              } else {                console.info('Page title:', result);              }            });          })      }      .width('100%')      .height('100%')    }  }}
复制代码

示例代码运行结果如下:

onTitleReceive title:  文档中心-HarmonyOS NEXT开发文档-华为开发者联盟

onPageEnd title: 文档中心-HarmonyOS NEXT开发文档-华为开发者联盟

Page title: "文档中心-HarmonyOS NEXT开发文档-华为开发者联盟"

【常见 FAQ】

Q:onTitleReceive 中通过 getTitle 获取标题为什么返回的是 url?

A:getTitle 返回的是网页 url,是因为当前网页未设置 title。

Q:在 Web 加载网页过程中通过 getTitle 获取网页标题有时会获取到 url,因为标题是实时刷新的不希望在加载网页过程显示为 url,如何解决?

A:可以在 onTitleReceive 通过 runJavaScript 执行 JavaScript 脚本获取标题。