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_ci42e41f4b71Sopenharmony_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