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<void> | 无返回结果的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```