1# WindowExtensionContext (系统接口)
2
3WindowExtensionContext模块是WindowExtensionAbility的上下文环境,继承自[ExtensionContext](../apis-ability-kit/js-apis-inner-application-extensionContext.md)。
4
5WindowExtensionContext模块提供[WindowExtensionAbility](js-apis-application-windowExtensionAbility-sys.md)具有的能力,包括启动Ability。
6
7> **说明:**
8>
9>  - 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
10>
11>  - 本模块接口为系统接口。
12>
13>  - 本模块接口仅可在Stage模型下使用。
14
15## 使用说明
16
17在使用WindowExtensionContext的功能前,需要通过WindowExtensionAbility子类实例获取。
18
19```ts
20import { WindowExtensionAbility, WindowExtensionContext } from '@kit.ArkUI';
21
22let context: WindowExtensionContext | null = null;
23
24class WindowExtAbility extends WindowExtensionAbility {
25  onConnect() {
26    context = this.context; // 获取WindowExtensionContext
27  }
28}
29```
30
31## WindowExtensionContext.startAbility
32
33startAbility(want: Want, options: StartOptions, callback: AsyncCallback<void>): void
34
35启动Ability,使用callback异步回调。
36
37**系统能力**:SystemCapability.WindowManager.WindowManager.Core
38
39**参数:**
40
41| 参数名 | 类型 | 必填 | 说明 |
42| -------- | -------- | -------- | -------- |
43| want | [Want](../apis-ability-kit/js-apis-app-ability-want.md)  | 是 | 启动Ability的want信息。 |
44| options | [StartOptions](../apis-ability-kit/js-apis-app-ability-startOptions.md) | 是 | 启动Ability所携带的参数。 |
45| callback | AsyncCallback<void> | 是 | callback形式返回启动结果。 |
46
47**错误码:**
48
49以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
50
51| 错误码ID | 错误信息 |
52| ------- | --------------------------------------------- |
53| 202     | Permission verification failed. A non-system application calls a system API. |
54| 401     | Parameter error. Possible cause: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. |
55
56**示例:**
57
58```ts
59import { WindowExtensionAbility } from '@kit.ArkUI';
60import { BusinessError } from '@kit.BasicServicesKit';
61import { Want, StartOptions } from '@kit.AbilityKit';
62
63class WindowExtAbility extends WindowExtensionAbility {
64
65  onConnect() {
66    let want: Want = {
67      bundleName: 'com.example.myapplication',
68      abilityName: 'MainAbility'
69    };
70    let options: StartOptions = {
71      windowMode: 102
72    };
73
74    try {
75      this.context.startAbility(want, options, (error: BusinessError) => {
76        let message = (error as BusinessError).message;
77        let errCode = (error as BusinessError).code;
78        if (errCode) {
79          // 处理业务逻辑错误
80          console.error(`startAbility failed, error.code: ${errCode}, error.message: ${message}`);
81          return;
82        }
83        // 执行正常业务
84        console.log('startAbility succeed');
85      });
86    } catch (paramError) {
87      // 处理入参错误异常
88      let message = (paramError as BusinessError).message;
89      let errCode = (paramError as BusinessError).code;
90      console.error(`error.code: ${errCode}, error.message: ${message}`);
91    }
92  }
93}
94```
95
96## WindowExtensionContext.startAbility
97
98startAbility(want: Want, options?: StartOptions): Promise\<void>
99
100启动Ability,使用Promise异步回调。
101
102**系统能力**:SystemCapability.WindowManager.WindowManager.Core
103
104**参数:**
105
106| 参数名 | 类型 | 必填 | 说明 |
107| -------- | -------- | -------- | -------- |
108| want | [Want](../apis-ability-kit/js-apis-app-ability-want.md)  | 是 | Want类型参数,传入需要启动的ability的信息,如Ability名称,Bundle名称等。 |
109| options | [StartOptions](../apis-ability-kit/js-apis-app-ability-startOptions.md) | 否 | 启动Ability所携带的参数。 |
110
111**返回值:**
112
113| 类型 | 说明 |
114| -------- | -------- |
115| Promise&lt;void&gt; | 无返回结果的Promise对象。 |
116
117**错误码:**
118
119以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
120
121| 错误码ID | 错误信息 |
122| ------- | --------------------------------------------- |
123| 202     | Permission verification failed. A non-system application calls a system API. |
124| 401     | Parameter error. Possible cause: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. |
125
126**示例:**
127
128```ts
129import { WindowExtensionAbility } from '@kit.ArkUI';
130import { BusinessError } from '@kit.BasicServicesKit';
131import { Want, StartOptions } from '@kit.AbilityKit';
132
133class WindowExtAbility extends WindowExtensionAbility {
134
135  onConnect() {
136    let want: Want = {
137      bundleName: 'com.example.myapp',
138      abilityName: 'MainAbility'
139    };
140    let options: StartOptions = {
141      windowMode: 102,
142    };
143
144    try {
145      this.context.startAbility(want, options)
146        .then(() => {
147          // 执行正常业务
148          console.log('startAbility succeed');
149        })
150        .catch((error: BusinessError) => {
151          // 处理业务逻辑错误
152          let message = (error as BusinessError).message;
153          let errCode = (error as BusinessError).code;
154          console.error(`startAbility failed, error.code: ${errCode}, error.message: ${message}`);
155        });
156    } catch (paramError) {
157      // 处理入参错误异常
158      let message = (paramError as BusinessError).message;
159      let errCode = (paramError as BusinessError).code;
160      console.error(`error.code: ${errCode}, error.message: ${message}`);
161    }
162  }
163}
164```