• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# AutoFillRequest (系统接口)
2
3当AutoFillExtensionAbility触发回调函数时,提供给开发者的页面数据和回调接口。
4
5> **说明:**
6>
7> 本模块首批接口从API version 11开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
8> 本模块接口均为系统接口。
9> 本模块接口仅可在Stage模型下使用。
10
11## 导入模块
12
13```ts
14import { autoFillManager } from '@kit.AbilityKit';
15```
16
17## FillRequest
18
19自动填充信息。
20
21**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
22
23| 名称        | 类型                 | 必填 | 说明                                                         |
24| ----------- | -------------------- | ---- | ------------------------------------------------------------ |
25| type        | [AutoFillType](js-apis-inner-application-autoFillType-sys.md)       | 是   | 自动填充类型。          |
26| viewData    | [ViewData](js-apis-inner-application-viewData-sys.md)               | 是   | 页面数据。              |
27| customData<sup>13+</sup>    | [CustomData](js-apis-inner-application-customData-sys.md)               | 是   | 自定义数据。             |
28| isPopup<sup>12+</sup>    | boolean               | 是   | 自动填充服务是否拉起popup窗口。<br>true:当前拉起popup窗口。<br>false:当前拉起模态窗。              |
29
30## SaveRequest
31
32自动保存请求信息。
33
34**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
35
36| 名称        | 类型                 | 必填 | 说明                                                         |
37| ----------- | -------------------- | ---- | ------------------------------------------------------------ |
38| viewData    | [ViewData](js-apis-inner-application-viewData-sys.md)               | 是   | 页面数据。              |
39
40## UpdateRequest<sup>12+</sup>
41
42自动填充更新信息。
43
44**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
45
46| 名称        | 类型                 | 必填 | 说明                                                         |
47| ----------- | -------------------- | ---- | ------------------------------------------------------------ |
48| viewData    | [ViewData](js-apis-inner-application-viewData-sys.md)               | 是   | 页面数据。              |
49
50## FillResponse
51
52自动填充响应。
53
54**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
55
56| 名称        | 类型                 | 必填 | 说明                                                         |
57| ----------- | -------------------- | ---- | ------------------------------------------------------------ |
58| viewData    | [ViewData](js-apis-inner-application-viewData-sys.md)               | 是   | 页面数据。              |
59
60## FillRequestCallback
61
62自动填充或者生成密码时的回调对象,可以通过此回调通知客户端成功或者失败。
63
64### FillRequestCallback.onSuccess
65
66onSuccess(response: FillResponse): void
67
68通知自动填充请求已成功完成。
69
70**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
71
72**参数:**
73
74| 参数名 | 类型 | 必填 | 说明 |
75| -------- | -------- | -------- | ------------------------------ |
76| response | [FillResponse](#fillresponse)  | 是 | 自动填充响应信息。 |
77
78**错误码:**
79
80以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。
81
82| 错误码ID | 错误信息 |
83| ------- | -------------------------------- |
84| 202  | Permission denied, non-system app called system api. |
85| 401  | Mandatory parameters are left unspecified. |
86| 16000050 | Internal error. |
87
88**示例:**
89
90```ts
91// MyAutoFillExtensionAbility.ts
92import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit';
93import { hilog } from '@kit.PerformanceAnalysisKit';
94
95class MyAutoFillExtensionAbility extends AutoFillExtensionAbility {
96  onFillRequest(session: UIExtensionContentSession,
97                request: autoFillManager.FillRequest,
98                callback: autoFillManager.FillRequestCallback) {
99    hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onFillRequest');
100    try {
101      let storageData: Record<string, string | autoFillManager.FillRequestCallback | autoFillManager.ViewData> = {
102        'fillCallback': callback,
103        'message': 'AutoFill Page',
104        'viewData': request.viewData,
105      }
106      let storage_fill = new LocalStorage(storageData);
107      if (session) {
108        session.loadContent('pages/AutoFillPage', storage_fill);
109      } else {
110        hilog.error(0x0000, 'testTag', '%{public}s', 'session is null');
111      }
112    } catch (err) {
113      hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content');
114    }
115  }
116}
117```
118
119```ts
120// AutoFillPage.ets
121import { autoFillManager } from '@kit.AbilityKit';
122import { BusinessError } from '@kit.BasicServicesKit';
123import { hilog } from '@kit.PerformanceAnalysisKit';
124
125@Entry
126@Component
127struct AutoFillPage {
128  storage: LocalStorage | undefined = this.getUIContext().getSharedLocalStorage();
129  fillCallback: autoFillManager.FillRequestCallback | undefined =
130    this.storage?.get<autoFillManager.FillRequestCallback>('fillCallback');
131  viewData: autoFillManager.ViewData | undefined = this.storage?.get<autoFillManager.ViewData>('viewData');
132
133  build() {
134    Row() {
135      Column() {
136        Text('AutoFill Page')
137          .fontSize(50)
138          .fontWeight(FontWeight.Bold)
139      }
140
141      Button('onSuccess')
142        .onClick(() => {
143          if (this.viewData) {
144            this.viewData.pageNodeInfos[0].value = 'user1';
145            this.viewData.pageNodeInfos[1].value = 'user1 password';
146            this.viewData.pageNodeInfos[2].value = 'user1 generate new password';
147            hilog.info(0x0000, 'testTag', 'autofill success with viewData: %{public}s', JSON.stringify(this.viewData));
148            try {
149              this.fillCallback?.onSuccess({ viewData: this.viewData });
150            } catch (error) {
151              console.error(`catch error, code: ${(error as BusinessError).code},
152                  message: ${(error as BusinessError).message}`);
153            }
154          }
155        })
156        .width('100%')
157    }
158    .height('100%')
159  }
160}
161```
162
163### FillRequestCallback.onFailure
164
165onFailure(): void
166
167通知自动填充请求已失败。
168
169**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
170
171**错误码:**
172
173以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。
174
175| 错误码ID | 错误信息 |
176| ------- | -------------------------------- |
177| 202 | Permission denied, non-system app called system api. |
178| 16000050 | Internal error. |
179
180**示例:**
181
182```ts
183// MyAutoFillExtensionAbility.ts
184import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit';
185import { hilog } from '@kit.PerformanceAnalysisKit';
186
187class MyAutoFillExtensionAbility extends AutoFillExtensionAbility {
188  onFillRequest(session: UIExtensionContentSession,
189                request: autoFillManager.FillRequest,
190                callback: autoFillManager.FillRequestCallback) {
191    hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onFillRequest');
192    try {
193      let storageData: Record<string, string | autoFillManager.FillRequestCallback | autoFillManager.ViewData> = {
194        'fillCallback': callback,
195        'message': 'AutoFill Page',
196        'viewData': request.viewData,
197      }
198      let storage_fill = new LocalStorage(storageData);
199      if (session) {
200        session.loadContent('pages/AutoFill Page', storage_fill);
201      } else {
202        hilog.error(0x0000, 'testTag', '%{public}s', 'session is null');
203      }
204    } catch (err) {
205      hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content');
206    }
207  }
208}
209```
210
211```ts
212// AutoFillPage.ets
213import { autoFillManager } from '@kit.AbilityKit';
214import { BusinessError } from '@kit.BasicServicesKit';
215import { hilog } from '@kit.PerformanceAnalysisKit';
216
217@Entry
218@Component
219struct AutoFillPage {
220  storage: LocalStorage | undefined = this.getUIContext().getSharedLocalStorage();
221  fillCallback: autoFillManager.FillRequestCallback | undefined =
222    this.storage?.get<autoFillManager.FillRequestCallback>('fillCallback');
223
224  build() {
225    Row() {
226      Column() {
227        Text('AutoFill Page')
228          .fontSize(50)
229          .fontWeight(FontWeight.Bold)
230      }
231
232      Button('onFailure')
233        .onClick(() => {
234          hilog.info(0x0000, 'testTag', 'autofill failure');
235          try {
236            this.fillCallback?.onFailure();
237          } catch (error) {
238            console.error(`catch error, code: ${(error as BusinessError).code},
239              message: ${(error as BusinessError).message}`);
240          }
241        })
242        .width('100%')
243    }
244    .height('100%')
245  }
246}
247```
248
249### FillRequestCallback.onCancel<sup>11+</sup>
250
251onCancel(fillContent?: string): void
252
253通知自动填充已被取消。
254
255**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
256
257**参数:**
258
259| 参数名                    | 类型   | 必填 | 说明                 |
260| ------------------------- | ------ | ---- | -------------------- |
261| fillContent | string | 否   | 表示通知自动填充取消后,返回给输入法框架的填充内容。 |
262
263**错误码:**
264
265以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。
266
267| 错误码ID | 错误信息 |
268| ------- | -------------------------------- |
269| 202  | Permission denied, non-system app called system api. |
270| 401  | Parameter error. Possible causes: 1. The input parameter is not valid parameter;2. Mandatory parameters are left unspecified. |
271| 16000050 | Internal error. |
272
273**示例:**
274
275```ts
276// MyAutoFillExtensionAbility.ts
277import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit';
278import { hilog } from '@kit.PerformanceAnalysisKit';
279
280class MyAutoFillExtensionAbility extends AutoFillExtensionAbility {
281  onFillRequest(session: UIExtensionContentSession,
282                request: autoFillManager.FillRequest,
283                callback: autoFillManager.FillRequestCallback) {
284    hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onFillRequest');
285    try {
286      let storageData: Record<string, string | autoFillManager.FillRequestCallback | autoFillManager.ViewData> = {
287        'fillCallback': callback,
288        'message': 'AutoFill Page',
289        'viewData': request.viewData,
290      }
291      let storage_fill = new LocalStorage(storageData);
292      if (session) {
293        session.loadContent('pages/AutoFillPage', storage_fill);
294      } else {
295        hilog.error(0x0000, 'testTag', '%{public}s', 'session is null');
296      }
297    } catch (err) {
298      hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content');
299    }
300  }
301}
302```
303
304```ts
305// AutoFillPage.ets
306import { autoFillManager } from '@kit.AbilityKit';
307import { BusinessError } from '@kit.BasicServicesKit';
308import { hilog } from '@kit.PerformanceAnalysisKit';
309
310@Entry
311@Component
312struct AutoFillPage {
313  storage: LocalStorage | undefined = this.getUIContext().getSharedLocalStorage();
314  fillCallback: autoFillManager.FillRequestCallback | undefined =
315    this.storage?.get<autoFillManager.FillRequestCallback>('fillCallback');
316
317  build() {
318    Row() {
319      Column() {
320        Text('Hello World')
321          .fontSize(50)
322          .fontWeight(FontWeight.Bold)
323      }
324
325      Button('onCancel')
326        .onClick(() => {
327          hilog.info(0x0000, 'testTag', 'autofill cancel');
328          try {
329            this.fillCallback?.onCancel();
330          } catch (error) {
331            console.error(`catch error, code: ${(error as BusinessError).code},
332                message: ${(error as BusinessError).message}`);
333          }
334        })
335        .width('100%')
336    }
337    .height('100%')
338  }
339}
340```
341
342### FillRequestCallback.setAutoFillPopupConfig<sup>12+</sup>
343
344setAutoFillPopupConfig(autoFillPopupConfig: AutoFillPopupConfig ): void
345
346动态调整气泡弹窗的尺寸和位置。
347
348**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
349
350**参数:**
351
352| 参数名 | 类型 | 必填 | 说明 |
353| -------- | -------- | -------- | ------------------------------ |
354| autoFillPopupConfig | [AutoFillPopupConfig](js-apis-inner-application-autoFillPopupConfig-sys.md) | 是 | 气泡弹窗尺寸和位置信息。 |
355
356**错误码:**
357
358以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。
359
360| 错误码ID | 错误信息 |
361| ------- | -------------------------------- |
362| 202  | Permission denied, non-system app called system api. |
363| 401  | Mandatory parameters are left unspecified. |
364| 16000050 | Internal error. |
365
366**示例:**
367
368```ts
369// MyAutoFillExtensionAbility.ts
370// MyAutoFillExtensionAbility.ts
371import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit';
372import { hilog } from '@kit.PerformanceAnalysisKit';
373
374export default class AutoFillAbility extends AutoFillExtensionAbility {
375  storage: LocalStorage = new LocalStorage();
376
377  onCreate(): void {
378    hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onCreate');
379  }
380
381  onDestroy(): void {
382    hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onDestroy');
383  }
384
385  onSessionDestroy(session: UIExtensionContentSession) {
386    hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onSessionDestroy');
387    hilog.info(0x0000, 'testTag', 'session content: %{public}s', JSON.stringify(session));
388  }
389
390  onForeground(): void {
391    hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onForeground');
392  }
393
394  onBackground(): void {
395    hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onBackground');
396  }
397
398  onUpdateRequest(request: autoFillManager.UpdateRequest): void {
399    hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onUpdateRequest');
400    console.log(`get fill request viewData: ${JSON.stringify(request.viewData)}.`);
401    let fillCallback = this.storage.get<autoFillManager.FillRequestCallback>('fillCallback');
402
403    if (fillCallback) {
404      try {
405        hilog.info(0x0000, 'testTag', 'pageNodeInfos.value: ' + JSON.stringify(request.viewData.pageNodeInfos[0].value));
406        fillCallback.setAutoFillPopupConfig({
407          popupSize: {
408            width: 400 + request.viewData.pageNodeInfos[0].value.length * 10,
409            height: 200 + request.viewData.pageNodeInfos[0].value.length * 10
410          },
411          placement: autoFillManager.PopupPlacement.TOP
412        });
413      } catch (err) {
414        hilog.info(0x0000, 'testTag', 'autoFillPopupConfig err: ' + err.code);
415      }
416    }
417  }
418
419  onFillRequest(session: UIExtensionContentSession, request: autoFillManager.FillRequest, callback: autoFillManager.FillRequestCallback) {
420    hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onFillRequest');
421    hilog.info(0x0000, 'testTag', 'Fill RequestCallback: %{public}s ', JSON.stringify(callback));
422    console.log(`testTag. Get fill request viewData: ${JSON.stringify(request.viewData)}.`);
423    console.log(`testTag. Get fill request type: ${JSON.stringify(request.type)}.`);
424
425    try {
426      let localStorageData: Record<string, string | autoFillManager.FillRequestCallback | autoFillManager.ViewData | autoFillManager.AutoFillType> = {
427        'message': 'AutoFill Page',
428        'fillCallback': callback,
429        'viewData': request.viewData,
430        'autoFillType': request.type
431      }
432      let storage_fill = new LocalStorage(localStorageData);
433      console.info(`testTag. Session: ${JSON.stringify(session)}.`);
434      let size: autoFillManager.PopupSize = {
435        width: 400,
436        height: 200
437      };
438      callback.setAutoFillPopupConfig({
439        popupSize: size
440      });
441      session.loadContent('pages/SelectorList', storage_fill);
442    } catch (err) {
443      hilog.error(0x0000, 'testTag', '%{public}s', 'autofill failed to load content: ' + JSON.stringify(err));
444    }
445  }
446
447  onSaveRequest(session: UIExtensionContentSession, request: autoFillManager.SaveRequest, callback: autoFillManager.SaveRequestCallback) {
448    hilog.info(0x0000, 'testTag', '%{public}s', 'autofill onSaveRequest');
449    try {
450      let localStorageData: Record<string, string | autoFillManager.SaveRequestCallback> = {
451        'message': 'AutoFill Page',
452        'saveCallback': callback
453      };
454      let storage_save = new LocalStorage(localStorageData);
455      if (session) {
456        session.loadContent('pages/SavePage', storage_save);
457      } else {
458        hilog.error(0x0000, 'testTag', '%{public}s', 'session is null');
459      }
460    } catch (err) {
461      hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content');
462    }
463  }
464}
465```
466
467## SaveRequestCallback
468
469自动保存或者手动保存请求回调。
470
471### SaveRequestCallback.onSuccess
472
473onSuccess(): void
474
475通知保存请求已成功处理。
476
477**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
478
479**错误码:**
480
481以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。
482
483| 错误码ID | 错误信息 |
484| ------- | -------------------------------- |
485| 202 | Permission denied, non-system app called system api. |
486| 16000050 | Internal error. |
487
488**示例:**
489
490```ts
491// MyAutoFillExtensionAbility.ts
492import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit';
493import { hilog } from '@kit.PerformanceAnalysisKit';
494class MyAutoFillExtensionAbility extends AutoFillExtensionAbility {
495  onSaveRequest(session: UIExtensionContentSession,
496                request: autoFillManager.SaveRequest,
497                callback: autoFillManager.SaveRequestCallback) {
498    hilog.info(0x0000, 'testTag', '%{public}s', 'onSaveRequest');
499    try {
500      let storageData: Record<string, string | autoFillManager.SaveRequestCallback | autoFillManager.ViewData> = {
501        'message': 'AutoFill Page',
502        'saveCallback': callback,
503        'viewData': request.viewData
504      };
505      let storage_save = new LocalStorage(storageData);
506      if (session) {
507        session.loadContent('pages/SavePage', storage_save);
508      } else {
509        hilog.error(0x0000, 'testTag', '%{public}s', 'session is null');
510      }
511    } catch (err) {
512      hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content');
513    }
514  }
515}
516```
517
518```ts
519// SavePage.ets
520import { autoFillManager } from '@kit.AbilityKit';
521import { BusinessError } from '@kit.BasicServicesKit';
522import { hilog } from '@kit.PerformanceAnalysisKit';
523
524@Entry
525@Component
526struct SavePage {
527  storage: LocalStorage | undefined = this.getUIContext().getSharedLocalStorage();
528  saveCallback: autoFillManager.SaveRequestCallback | undefined =
529    this.storage?.get<autoFillManager.SaveRequestCallback>('saveCallback');
530
531  build() {
532    Row() {
533      Column() {
534        Text('SavePage')
535          .fontSize(50)
536          .fontWeight(FontWeight.Bold)
537      }
538
539      Button('onSuccess')
540        .onClick(() => {
541          hilog.info(0x0000, 'testTag', 'autosave success');
542          try {
543            this.saveCallback?.onSuccess();
544          } catch (error) {
545            console.error(`catch error, code: ${(error as BusinessError).code},
546                message: ${(error as BusinessError).message}`);
547          }
548        })
549        .width('100%')
550    }
551    .height('100%')
552  }
553}
554```
555
556### SaveRequestCallback.onFailure
557
558onFailure(): void
559
560通知保存请求处理失败。
561
562**系统能力**:SystemCapability.Ability.AbilityRuntime.AbilityCore
563
564**错误码:**
565
566以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。
567
568| 错误码ID | 错误信息 |
569| ------- | -------------------------------- |
570| 202 | Permission denied, non-system app called system api. |
571| 16000050 | Internal error. |
572
573**示例:**
574
575```ts
576// MyAutoFillExtensionAbility.ts
577import { AutoFillExtensionAbility, UIExtensionContentSession, autoFillManager } from '@kit.AbilityKit';
578import { hilog } from '@kit.PerformanceAnalysisKit';
579
580class MyAutoFillExtensionAbility extends AutoFillExtensionAbility {
581  onSaveRequest(session: UIExtensionContentSession,
582                request: autoFillManager.SaveRequest,
583                callback: autoFillManager.SaveRequestCallback) {
584    hilog.info(0x0000, 'testTag', '%{public}s', 'onSaveRequest');
585    try {
586      let storageData: Record<string, string | autoFillManager.SaveRequestCallback | autoFillManager.ViewData> = {
587        'message': 'AutoFill Page',
588        'saveCallback': callback,
589        'viewData': request.viewData
590      }
591      let storage_save = new LocalStorage(storageData);
592      if (session) {
593        session.loadContent('pages/SavePage', storage_save);
594      } else {
595        hilog.error(0x0000, 'testTag', '%{public}s', 'session is null');
596      }
597    } catch (err) {
598      hilog.error(0x0000, 'testTag', '%{public}s', 'failed to load content');
599    }
600  }
601}
602```
603
604```ts
605// SavePage.ets
606import { autoFillManager } from '@kit.AbilityKit';
607import { BusinessError } from '@kit.BasicServicesKit';
608import { hilog } from '@kit.PerformanceAnalysisKit';
609
610@Entry
611@Component
612struct SavePage {
613  storage: LocalStorage | undefined = this.getUIContext().getSharedLocalStorage();
614  saveCallback: autoFillManager.SaveRequestCallback | undefined =
615    this.storage?.get<autoFillManager.SaveRequestCallback>('saveCallback');
616
617  build() {
618    Row() {
619      Column() {
620        Text('Save Page')
621          .fontSize(50)
622          .fontWeight(FontWeight.Bold)
623      }
624
625      Button('onFailure')
626        .onClick(() => {
627          hilog.info(0x0000, 'testTag', 'autofill failure');
628          try {
629            this.saveCallback?.onFailure();
630          } catch (error) {
631            console.error(`catch error, code: ${(error as BusinessError).code},
632              message: ${(error as BusinessError).message}`);
633          }
634        })
635        .width('100%')
636    }
637    .height('100%')
638  }
639}
640```
641