• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 使用Web组件的智能分词能力
2<!--Kit: ArkWeb-->
3<!--Subsystem: Web-->
4<!--Owner: @zourongchun-->
5<!--Designer: @zhufenghao-->
6<!--Tester: @ghiker-->
7<!--Adviser: @HelloCrease-->
8从API version 20开始,ArkWeb提供了H5页面内的文本分词识别功能,支持文本分词高亮、分词长按预览及文本选择菜单扩展等。这些功能需将[enableDataDetector](../reference/apis-arkweb/arkts-basic-components-web-attributes.md#enabledatadetector20)设置为true,默认为false。
9
10此功能主要用于单页H5页面内容的实体识别,能够自动识别页面中的电话号码、网址等信息,并提供便捷的交互操作。启用此功能后,用户可以直接在页面中与识别的实体交互,如点击电话号码进行呼叫,点击地址在地图中查看,从而提升用户体验。
11
12可识别的实体类型包括电话、链接、邮箱、地址和时间,详见[TextDataDetectorType](../reference/apis-arkui/arkui-ts/ts-text-common.md#textdatadetectortype11枚举说明)。
13
14
15## 文本分词高亮
16Web组件内的H5页面加载完成后,自动识别并高亮标注页面内的特殊实体。页面变化后新出现的实体不会被高亮标注。
17
18特殊实体的高亮过滤规则如下:
19
20- 不处理输入框内、可编辑区域内的文本实体。
21- 不处理`<a></a>`标签内的文本实体。
22- 不处理跨域iframe内、两层及以上嵌套iframe内的文本实体。
23- 跨节点的实体不会被高亮,如`<p>星<span>期六</span></p>`。
24
25页面中文本实体高亮后,将转变为超链接形式。触摸点击或鼠标左键点击实体,会根据实体类型弹出操作菜单。
26
27```ts
28// xxx.ets
29import { webview } from '@kit.ArkWeb';
30
31@Entry
32@Component
33struct Index {
34  @State message: string = 'Hello World';
35  webController: webview.WebviewController = new webview.WebviewController();
36
37  build() {
38    Column() {
39      Row() {
40        Button('Refresh')
41          .onClick(() => {
42            this.webController.refresh();
43          })
44      }
45
46      Web({
47        src: $rawfile('index.html'),
48        controller: this.webController
49      })
50        .enableDataDetector(true)
51        .dataDetectorConfig({
52          types: []  // 实体识别类型,为空则识别所有类型
53        })
54    }
55    .height('100%')
56    .width('100%')
57  }
58}
59```
60
61加载的html文件。
62```html
63<!-- index.html -->
64<!DOCTYPE html>
65<html>
66<head>
67    <title>Test</title>
68    <meta name="viewport" content="width=device-width, initial-scale=1.0">
69</head>
70<body>
71    <p>电话:400-123-4567</p>
72    <p>邮箱:test@example.com</p>
73    <p>网址:https://www.example.com/</p>
74    <p>日期:2025.06.01</p>
75    <p>地址:北京市海淀区中关村</p>
76    <p>不会高亮的星<span>期六</span>与会高亮的星期六</p>
77</body>
78</html>
79```
80点击实体文本,弹出对应的操作菜单,如下图。
81
82![web-data-detector-menu](figures/web-data-detector-menu.gif)
83
84鼠标右键点击、鼠标拖拽将触发超链接的默认行为。
85
86接口[dataDetectorConfig](../reference/apis-arkweb/arkts-basic-components-web-attributes.md#datadetectorconfig20)未被使用,或其参数[TextDataDetectorConfig](../reference/apis-arkui/arkui-ts/ts-text-common.md#textdatadetectorconfig11对象说明)的enablePreviewMenu设置为false时,长按、拖拽将触发超链接的默认行为,如下图。
87
88![web-data-detector-normal-drag](figures/web-data-detector-normal-drag.gif)
89
90页面文本元素的计算样式存在`user-select:none`时,实体菜单中“选择文本”的选项无效,但在[copyOptions](../reference/apis-arkweb/arkts-basic-components-web-attributes.md#copyoptions11)不为CopyOptions.None时,仍可以复制实体文本。
91
92## 分词长按预览
93使用分词长按预览功能时,需要额外配置[dataDetectorConfig](../reference/apis-arkweb/arkts-basic-components-web-attributes.md#datadetectorconfig20):
94
95<!--code_no_check-->
96```ts
97Web({
98  src: $rawfile('index.html'),
99  controller: this.webController
100})
101  .enableDataDetector(true)
102  .dataDetectorConfig({
103    enablePreviewMenu: true,  // 配置分词长按预览功能
104    types: []
105  })
106```
107在[copyOptions](../reference/apis-arkweb/arkts-basic-components-web-attributes.md#copyoptions11)不为CopyOptions.None时,长按被高亮的实体文本,会弹出预览菜单,如下图。
108
109![web-data-detector-preview-drag](figures/web-data-detector-preview-drag.gif)
110
111通过[bindSelectionMenu](../reference/apis-arkweb/arkts-basic-components-web-attributes.md#bindselectionmenu13)绑定的[自定义菜单](web_menu.md#自定义菜单)与分词长按预览菜单互不影响。长按被高亮的分词超链接不会弹出自定义超链接菜单,长按普通超链接也不会弹出分词预览菜单。
112
113
114## 文本选择菜单扩展
115在非编辑区域中,选中的文本满足以下条件时,文本选择菜单将展示对应的AI菜单选项:
116
117- 选中文本经过UTF-8编码转换后,其字节长度不超过255字节。
118- 选中文本中仅包含一个匹配识别类型的实体词(可通过[dataDetectorConfig](../reference/apis-arkweb/arkts-basic-components-web-attributes.md#datadetectorconfig20)配置支持的识别类型)。
119- 不处于“全选”操作状态下的文本。
120
121![web-data-detector-selection-menu](figures/web-data-detector-selection-menu.gif)
122
123AI菜单项的出现与是否选中高亮的实体文本无关,只要满足上述条件,AI菜单项就会显示。