1e41f4b71Sopenharmony_ci# IsolatedComponent (系统接口) 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ciIsolatedComponent用于支持在本页面内嵌入显示独立Abc(.abc文件)提供的UI,展示的内容在受限worker线程中运行。 4e41f4b71Sopenharmony_ci 5e41f4b71Sopenharmony_ci通常用于有Abc热更新诉求的模块化开发场景。 6e41f4b71Sopenharmony_ci 7e41f4b71Sopenharmony_ci> **说明:** 8e41f4b71Sopenharmony_ci> 9e41f4b71Sopenharmony_ci> 该组件从API Version 12开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 10e41f4b71Sopenharmony_ci> 11e41f4b71Sopenharmony_ci> 本模块为系统接口。 12e41f4b71Sopenharmony_ci 13e41f4b71Sopenharmony_ci## 使用约束 14e41f4b71Sopenharmony_ci 15e41f4b71Sopenharmony_ci**规格约束** 16e41f4b71Sopenharmony_ci 17e41f4b71Sopenharmony_ci1、本组件不支持预览。 18e41f4b71Sopenharmony_ci 19e41f4b71Sopenharmony_ci2、Abc需要[VerifyAbc](../../apis-ability-kit/js-apis-bundleManager.md#bundlemanagerverifyabc11)校验通过之后才可以使用于当前组件。 20e41f4b71Sopenharmony_ci 21e41f4b71Sopenharmony_ci3、不支持构造参数更新,仅首次传入有效。 22e41f4b71Sopenharmony_ci 23e41f4b71Sopenharmony_ci4、不支持IsolatedComponent组件嵌套场景。 24e41f4b71Sopenharmony_ci 25e41f4b71Sopenharmony_ci**体验约束** 26e41f4b71Sopenharmony_ci 27e41f4b71Sopenharmony_ci1、创建IsolatedComponent组件时,受限worker线程加载Abc布局渲染存在一定耗时,在此等待期间显示IsolatedComponent组件的背景色。 28e41f4b71Sopenharmony_ci 29e41f4b71Sopenharmony_ci2、主线程与受限worker线程之间布局渲染是异步处理,布局变化、旋转等导致的页面变化存在不同步现象。 30e41f4b71Sopenharmony_ci 31e41f4b71Sopenharmony_ci3、主线程与受限worker线程之间事件传递是异步处理,不支持线程之间的事件冒泡,线程之间的UI交互存在事件冲突现象。 32e41f4b71Sopenharmony_ci 33e41f4b71Sopenharmony_ci**安全约束** 34e41f4b71Sopenharmony_ci 35e41f4b71Sopenharmony_ci1、独立Abc通过IsolatedComponent组件嵌入式显示在宿主进程,即可说明其Abc内容完全向宿主开放,宿主有权操作独立Abc的内容,对此安全敏感场景禁用。 36e41f4b71Sopenharmony_ci 37e41f4b71Sopenharmony_ci2、独立Abc运行在受限worker可保证相对安全,独立Abc内容不影响主线程。 38e41f4b71Sopenharmony_ci 39e41f4b71Sopenharmony_ci## 子组件 40e41f4b71Sopenharmony_ci 41e41f4b71Sopenharmony_ci无 42e41f4b71Sopenharmony_ci 43e41f4b71Sopenharmony_ci## 接口 44e41f4b71Sopenharmony_ci 45e41f4b71Sopenharmony_ciIsolatedComponent(options: IsolatedOptions) 46e41f4b71Sopenharmony_ci 47e41f4b71Sopenharmony_ci创建IsolatedComponent组件,用于显示受限worker运行的Abc。 48e41f4b71Sopenharmony_ci 49e41f4b71Sopenharmony_ci**参数:** 50e41f4b71Sopenharmony_ci 51e41f4b71Sopenharmony_ci| 参数名 | 参数类型 | 必填 | 参数描述 | 52e41f4b71Sopenharmony_ci| --------------------- | ---------------------------------------------------------- | ---- | ------------------ | 53e41f4b71Sopenharmony_ci| options | [IsolatedOptions](#isolatedoptions) | 是 | 需要传递的构造项。 | 54e41f4b71Sopenharmony_ci 55e41f4b71Sopenharmony_ci## IsolatedOptions 56e41f4b71Sopenharmony_ci用于在IsolatedComponent进行构造的时候,传递可选的构造参数。 57e41f4b71Sopenharmony_ci 58e41f4b71Sopenharmony_ci**参数:** 59e41f4b71Sopenharmony_ci 60e41f4b71Sopenharmony_ci| 参数名 | 参数类型 | 必填 | 参数描述 | 61e41f4b71Sopenharmony_ci| ---- | ---------------------------------------- | ---- | --------------- | 62e41f4b71Sopenharmony_ci| want | [Want](../../apis-ability-kit/js-apis-app-ability-want.md) | 是 | 要加载的Abc信息。 | 63e41f4b71Sopenharmony_ci| worker | [RestrictedWorker](../../apis-arkts/js-apis-worker.md#restrictedworker11) | 是 | 运行Abc的受限worker。 | 64e41f4b71Sopenharmony_ci 65e41f4b71Sopenharmony_ci## 属性 66e41f4b71Sopenharmony_ci仅支持[width](ts-universal-attributes-size.md#width)、[height](ts-universal-attributes-size.md#height)、[backgroundColor](ts-universal-attributes-background.md#backgroundcolor)通用属性 67e41f4b71Sopenharmony_ci 68e41f4b71Sopenharmony_ci## 事件 69e41f4b71Sopenharmony_ci 70e41f4b71Sopenharmony_ci不支持[通用事件](ts-universal-events-click.md)。 71e41f4b71Sopenharmony_ci 72e41f4b71Sopenharmony_ci将事件经过坐标转换后异步传递给受限worker线程处理。 73e41f4b71Sopenharmony_ci 74e41f4b71Sopenharmony_ci支持以下事件: 75e41f4b71Sopenharmony_ci 76e41f4b71Sopenharmony_ci### onError 77e41f4b71Sopenharmony_ci 78e41f4b71Sopenharmony_cionError(callback:ErrorCallback) 79e41f4b71Sopenharmony_ci 80e41f4b71Sopenharmony_ci被拉起的Ability扩展在运行过程中发生异常时触发本回调。可通过回调参数中的code、name和message获取错误信息并做处理。 81e41f4b71Sopenharmony_ci 82e41f4b71Sopenharmony_ci**参数:** 83e41f4b71Sopenharmony_ci 84e41f4b71Sopenharmony_ci| 参数名 | 类型 | 说明 | 85e41f4b71Sopenharmony_ci| ---------------------------- | ------ | ------------------------------------------------------------ | 86e41f4b71Sopenharmony_ci| callback | [ErrorCallback](../../apis-basic-services-kit/js-apis-base.md#errorcallback) | 报错信息。 | 87e41f4b71Sopenharmony_ci 88e41f4b71Sopenharmony_ci## 示例 89e41f4b71Sopenharmony_ci 90e41f4b71Sopenharmony_ci本示例仅展示组件使用的方法。 91e41f4b71Sopenharmony_ci 92e41f4b71Sopenharmony_ci```ts 93e41f4b71Sopenharmony_ci// OhCardWorker.ets 94e41f4b71Sopenharmony_ciimport { worker, ThreadWorkerGlobalScope, MessageEvents, ErrorEvent } from '@kit.ArkTS'; 95e41f4b71Sopenharmony_ciconst workerPort: ThreadWorkerGlobalScope = worker.workerPort; 96e41f4b71Sopenharmony_ci 97e41f4b71Sopenharmony_ciworkerPort.onmessage = (e: MessageEvents) => {} 98e41f4b71Sopenharmony_ciworkerPort.onmessageerror = (e: MessageEvents) => {} 99e41f4b71Sopenharmony_ciworkerPort.onerror = (e: ErrorEvent) => {} 100e41f4b71Sopenharmony_ci``` 101e41f4b71Sopenharmony_ci 102e41f4b71Sopenharmony_ci```ts 103e41f4b71Sopenharmony_ci// Index.ets 104e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS'; 105e41f4b71Sopenharmony_ciimport { bundleManager } from '@kit.AbilityKit'; 106e41f4b71Sopenharmony_ci 107e41f4b71Sopenharmony_ci@Entry 108e41f4b71Sopenharmony_ci@Component 109e41f4b71Sopenharmony_cistruct Index2 { 110e41f4b71Sopenharmony_ci @State isShow: boolean = false; 111e41f4b71Sopenharmony_ci worker ?: worker.RestrictedWorker; 112e41f4b71Sopenharmony_ci resourcePath : string = ""; 113e41f4b71Sopenharmony_ci abcPath : string = ""; 114e41f4b71Sopenharmony_ci entryPoint : string = ""; 115e41f4b71Sopenharmony_ci fileName: string = "Index" 116e41f4b71Sopenharmony_ci 117e41f4b71Sopenharmony_ci build() { 118e41f4b71Sopenharmony_ci Row() { 119e41f4b71Sopenharmony_ci Column() { 120e41f4b71Sopenharmony_ci // 1、 将应用沙箱下的/data/storage/el2/haps/entry/files/Index.abc 调用verifyAbc校验 121e41f4b71Sopenharmony_ci Button("verifyAbc").onClick(()=>{ 122e41f4b71Sopenharmony_ci let abcFilePath = getContext(this).filesDir + "/" + this.fileName + ".abc"; 123e41f4b71Sopenharmony_ci bundle.verifyAbc([abcFilePath], false); 124e41f4b71Sopenharmony_ci }).height(100).width(100) 125e41f4b71Sopenharmony_ci 126e41f4b71Sopenharmony_ci // 2、显示IsolatedComponent 127e41f4b71Sopenharmony_ci Button("showIsolatedComponent").onClick(()=>{ 128e41f4b71Sopenharmony_ci if (!this.isShow) { 129e41f4b71Sopenharmony_ci this.worker = new worker.RestrictedWorker("./OhCardWorker"); 130e41f4b71Sopenharmony_ci // /data/storage/el2/haps/entry/files/{fileName}.hap 131e41f4b71Sopenharmony_ci this.resourcePath = getContext(this).filesDir + "/" + this.fileName + '.hap'; 132e41f4b71Sopenharmony_ci // /abcs/data/storage/el2/haps/entry/files/{fileName}.hap 133e41f4b71Sopenharmony_ci this.abcPath = "/abcs" + getContext(this).filesDir + "/" + this.fileName; 134e41f4b71Sopenharmony_ci this.entryPoint = "com.ohos.test/entry/ets/pages/Index" 135e41f4b71Sopenharmony_ci this.isShow = true; 136e41f4b71Sopenharmony_ci } 137e41f4b71Sopenharmony_ci }).height(100).width(100) 138e41f4b71Sopenharmony_ci 139e41f4b71Sopenharmony_ci if (this.isShow) { 140e41f4b71Sopenharmony_ci IsolatedComponent({ 141e41f4b71Sopenharmony_ci want: { 142e41f4b71Sopenharmony_ci "parameters" : { 143e41f4b71Sopenharmony_ci "resourcePath" : this.resourcePath, 144e41f4b71Sopenharmony_ci "abcPath" : this.abcPath, 145e41f4b71Sopenharmony_ci "entryPoint" : this.entryPoint 146e41f4b71Sopenharmony_ci } 147e41f4b71Sopenharmony_ci }, 148e41f4b71Sopenharmony_ci "worker" : this.worker 149e41f4b71Sopenharmony_ci }).width(300).height(300).onError((err)=>{ 150e41f4b71Sopenharmony_ci console.info("onError : " + JSON.stringify(err)); 151e41f4b71Sopenharmony_ci }) 152e41f4b71Sopenharmony_ci } 153e41f4b71Sopenharmony_ci } 154e41f4b71Sopenharmony_ci .width('100%') 155e41f4b71Sopenharmony_ci } 156e41f4b71Sopenharmony_ci .height('100%') 157e41f4b71Sopenharmony_ci } 158e41f4b71Sopenharmony_ci} 159e41f4b71Sopenharmony_ci 160e41f4b71Sopenharmony_ci``` 161