• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.app.ability.autoFillManager (自动填充框架)
2
3<!--Kit: Ability Kit-->
4<!--Subsystem: Ability-->
5<!--Owner: @hanchen45; @Luobniz21-->
6<!--Designer: @ccllee1-->
7<!--Tester: @lixueqing513-->
8<!--Adviser: @huipeizi-->
9
10autoFillManager模块为应用提供账号、密码、地址、电话号码等用户信息的自动填充能力。
11
12不同于页面切换时触发的系统自动保存功能,该功能需要由用户手动触发。例如用户在网站上输入了账号密码,并点击“保存”按钮,才能触发相应的自动保存操作。
13
14> **说明:**
15>
16> 本模块首批接口从API version 11 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
17>
18> 本模块接口仅可在Stage模型下使用。
19
20## 导入模块
21
22```ts
23import { autoFillManager } from '@kit.AbilityKit';
24```
25
26## AutoSaveCallback
27
28当保存请求完成时所触发的回调接口。
29
30### onSuccess
31
32onSuccess(): void
33
34当保存请求成功时,该回调被调用。
35
36**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
37
38**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
39
40**示例:**
41
42参见[AutoSaveCallback.onFailure](#onfailure)。
43
44### onFailure
45
46onFailure(): void
47
48当保存请求失败时,该回调被调用。
49
50**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
51
52**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
53
54**示例:**
55
56  ```ts
57// Index.ets, 含有账号、密码框等组件的页面
58import { autoFillManager } from '@kit.AbilityKit';
59import { UIContext } from '@kit.ArkUI';
60import { BusinessError } from '@kit.BasicServicesKit';
61
62let uiContext = AppStorage.get<UIContext>("uiContext");
63let callback: autoFillManager.AutoSaveCallback = {
64  onSuccess: () => {
65    console.info(`save request on success.`);
66  },
67  onFailure: () => {
68    console.error(`save request on failure.`);
69  }
70};
71
72@Entry
73@Component
74struct Index {
75  build() {
76    Button('requestAutoSave')
77      .onClick(() => {
78        try {
79          // 发起保存请求
80          autoFillManager.requestAutoSave(uiContext, callback);
81        } catch (error) {
82          console.error(`catch error, code: ${(error as BusinessError).code}, message: ${(error as BusinessError).message}`);
83        }
84      })
85  }
86}
87  ```
88
89> **说明:**
90>
91> 示例中从AppStorage中取得的UiContext为预先在EntryAbility(拉起此页面的Ability)中OnWindowStageCreate生命周期获得,并存储到AppStorage中,具体可参考[requestAutoSave](#autofillmanagerrequestautosave)。
92
93## autoFillManager.requestAutoSave
94
95requestAutoSave(context: UIContext, callback?: AutoSaveCallback): void
96
97请求保存表单数据,使用callback异步回调。
98如果当前表单没有提供表单切换的功能,可以通过此接口保存历史表单输入数据,保存请求完成时会触发该回调。
99
100**原子化服务API**:从API version 12开始,该接口支持在原子化服务中使用。
101
102**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
103
104**参数:**
105
106| 参数名 | 类型 | 必填 | 说明 |
107| -------- | -------- | -------- | -------- |
108| context | [UIContext](../apis-arkui/arkts-apis-uicontext-uicontext.md) | 是 | 将在其中执行保存操作的UI上下文。 |
109| callback | [AutoSaveCallback](#autosavecallback)  | 否 | 当保存请求完成时所触发的回调接口。|
110
111**错误码:**
112
113以下错误码的详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。
114| 错误码ID | 错误信息 |
115| ------- | -------------------------------- |
116| 401      | The parameter check failed. Possible causes: 1. Get instance id failed; 2. Parse instance id failed; 3. The second parameter is not of type callback. |
117| 16000050 | Internal error. |
118
119**示例:**
120
121  ```ts
122// EntryAbility.ets
123import { UIAbility, common } from '@kit.AbilityKit';
124import { BusinessError } from '@kit.BasicServicesKit';
125import { window, UIContext } from '@kit.ArkUI';
126import { hilog } from '@kit.PerformanceAnalysisKit';
127
128export default class EntryAbility extends UIAbility {
129  onWindowStageCreate(windowStage: window.WindowStage): void {
130    // Main window is created, set main page for this ability
131    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
132    let localStorageData: Record<string, string | common.UIAbilityContext> = {
133      'message': "AutoFill Page",
134      'context': this.context,
135    };
136    let storage = new LocalStorage(localStorageData);
137    windowStage.loadContent('pages/Index', storage, (err, data) => {
138      if (err && err.code) {
139        hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
140        return;
141      }
142      // Obtain the main window.
143      windowStage.getMainWindow((err: BusinessError, data: window.Window) => {
144        let errCode: number = err?.code;
145        if (errCode) {
146          console.error('Failed to obtain the main window. Cause: ' + JSON.stringify(err));
147          return;
148        }
149        console.info('Succeeded in obtaining the main window. Data: ' + JSON.stringify(data));
150        // get UIContext instance.
151        let uiContext: UIContext = windowStage.getMainWindowSync().getUIContext();
152        PersistentStorage.persistProp("uiContext", uiContext);
153      })
154      hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');
155    });
156  }
157}
158  ```
159
160  ```ts
161  // Index.ets
162import { autoFillManager } from '@kit.AbilityKit';
163import { UIContext } from '@kit.ArkUI';
164import { BusinessError } from '@kit.BasicServicesKit';
165
166@Entry
167@Component
168struct Index {
169  build() {
170    Row() {
171      Column() {
172        Text('Hello World')
173          .fontSize(50)
174          .fontWeight(FontWeight.Bold)
175      }
176
177      Button('requestAutoSave')
178        .onClick(() => {
179          let uiContext = AppStorage.get<UIContext>("uiContext");
180          console.info("uiContext: ", JSON.stringify(uiContext));
181          try {
182            // 发起保存请求
183            autoFillManager.requestAutoSave(uiContext, {
184              onSuccess: () => {
185                console.info(`save request on success.`);
186              },
187              onFailure: () => {
188                console.error(`save request on failure.`);
189              }
190            });
191          } catch (error) {
192            console.error(`catch error, code: ${(error as BusinessError).code}, message: ${(error as BusinessError).message}`);
193          }
194        })
195        .width('100%')
196    }
197    .height('100%')
198  }
199}
200  ```
201