

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 嵌入 Amazon WorkSpaces 应用程序流式传输会话
<a name="embed-streaming-sessions"></a>

通过在您的网站上嵌入 WorkSpaces 应用程序流式传输会话，您可以为用户创建动态、交互式和自定义的体验。嵌入式 WorkSpaces 应用程序流式传输会话允许您的用户直接从您的网站与 3D 模型、地图和数据集进行交互。例如，用户可以在 WorkSpaces 应用程序直播会话的同时查看培训说明或教育材料。

**Topics**
+ [嵌入 Amazon WorkSpaces 应用程序流式传输会话的先决条件](embed-streaming-sessions-prerequisites.md)
+ [嵌入 Amazon WorkSpaces 应用程序流式传输会话的建议和使用注意事项](embed-streaming-sessions-recommendations-considerations.md)
+ [步骤 1：为嵌入式 Amazon WorkSpaces 应用程序流式传输会话指定主机域](specify-host-domain-embedded-streaming-sessions.md)
+ [步骤 2：为用户身份验证创建流式传输 URL](create-streaming-url-user-authentication.md)
+ [步骤 3：下载嵌入式 Amazon WorkSpaces 应用程序文件](download-embed-files.md)
+ [步骤 4：配置您的网站以便与 Amazon WorkSpaces 应用程序集成](configure-website-for-integration.md)
+ [嵌入式 Amazon WorkSpaces 应用程序流式传输会话的常量、函数和事件](constants-functions-events-embedded-sessions.md)

# 嵌入 Amazon WorkSpaces 应用程序流式传输会话的先决条件
<a name="embed-streaming-sessions-prerequisites"></a>

要在网站中嵌入 WorkSpaces 应用程序流式传输会话，必须具备以下条件：
+ 已配置的 WorkSpaces 应用程序环境，包括 WorkSpaces 应用程序映像、队列和堆栈。有关如何创建这些资源的信息，请参阅《*WorkSpaces 应用程序管理指南*》中的以下主题：
  +  [教程：使用 WorkSpaces 应用程序控制台创建自定义 WorkSpaces 应用程序镜像](tutorial-image-builder.md) 或 [使用镜像助手 CLI 操作以编程方式创建您的 Amazon WorkSpaces 应用程序映像](programmatically-create-image.md)
  + [在 Amazon WorkSpaces 应用程序中创建舰队](set-up-stacks-fleets-create.md)
  + [在 Amazon WorkSpaces 应用程序中创建堆栈](set-up-stacks-fleets-install.md)
+ 用于用户身份验证的流式传输 URL。目前不支持 SAML 2.0 和 WorkSpaces 应用程序用户池作为嵌入式 WorkSpaces 应用程序流式传输会话的身份验证方法。
+ 或者，您可以为嵌入式 WorkSpaces 应用程序流式传输会话使用自定义域。您可以使用自定义域名，以便向用户显示您自己的公司 URL，而不是 WorkSpaces 应用程序 URL。如果您的用户使用阻止第三方 Cookie 的 Web 浏览器，则需要自定义域。
**注意**  
您可以使用 Amazon 配置自定义域名 CloudFront。有关信息，请参阅在[ WorkSpaces 应用程序中使用自定义域](https://aws.amazon.com/blogs/desktop-and-application-streaming/using-custom-domains-with-amazon-appstream-2-0/)。

  使用自定义域时，您必须：
  + 创建使用相同域的流式传输 URL。
  + **appstream-custom-url-domain**添加到将托管嵌入式 WorkSpaces 应用程序流式传输会话的网页标题中。对于标头值，请使用您的反向代理向用户显示的域。有关更多信息，请参阅 [使用自定义域的配置要求](create-streaming-url-user-authentication.md#configuration-requirements-custom-domains)。

# 嵌入 Amazon WorkSpaces 应用程序流式传输会话的建议和使用注意事项
<a name="embed-streaming-sessions-recommendations-considerations"></a>

请考虑以下嵌入式 WorkSpaces 应用程序流式传输会话的建议和使用说明。
+ 为了最大限度地控制用户的嵌入式 WorkSpaces 应用程序流媒体体验，我们建议您配置持续大约 5 秒的短时流式传输 URLs 。任何用户都可以检查网页的内容并查看其源代码。这包括文档对象模型 (DOM) 和 iframe 的 src (源) URL。如果用户复制 URL 时仍然有效，则该用户可以将 URL 粘贴到单独的浏览器选项卡中，然后使用标准 WorkSpaces 应用程序门户用户界面流式传输会话，而无需嵌入选项。
+ 将自定义域用于嵌入式 WorkSpaces 应用程序流式传输会话时，不支持并发会话。当用户在同一个网页上或在两个不同的浏览器选项卡上启动两个嵌入式 WorkSpaces 应用程序流式传输会话时，就会发生并发会话。一个用户不能有并发会话，但可以有多个用户。例如，用户登录您的应用程序，应用程序会生成一个流式传输 URL 提供给客户（作为计费的唯一用户），客户加载流式传输 URL，然后该客户被分配给指定池中的一个 appstream 实例。

# 步骤 1：为嵌入式 Amazon WorkSpaces 应用程序流式传输会话指定主机域
<a name="specify-host-domain-embedded-streaming-sessions"></a>

要在网页中嵌入 WorkSpaces 应用程序流式传输会话，请先更新堆栈以指定托管嵌入式流媒体会话的域。这是一项安全措施，可确保只有经过授权的网站域才能嵌入 WorkSpaces 应用程序流式传输会话。 WorkSpaces 应用程序将您指定的一个或多个域添加到 **Content-Security-Policy** (CSP) 标头中。有关更多信息，请参阅 Mozilla [MDN Web Docs](https://developer.mozilla.org/en-US/) 文档中的[内容安全政策（CSP）](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP)。

如需更新堆栈以指定要托管嵌入式流式传输会话的域，请使用以下任一方法：
+  WorkSpaces 应用程序控制台
+ `EmbedHostDomains` API 操作 
+ `embed-host-domains` AWS 命令行界面 (AWS CLI) 命令

要使用 WorkSpaces 应用程序控制台指定主机域，请执行以下步骤。

1. 在[https://console.aws.amazon.com/appstream2/家](https://console.aws.amazon.com/appstream2/home)中打开 WorkSpaces 应用程序控制台。

1. 在左侧导航窗格中，选择 **Stacks (堆栈)**，然后选择所需堆栈。

1. 选择**编辑**。

1. 展开 “**嵌入 WorkSpaces 应用程序”（可选）**。

1. 在 **Host Domains (主机域)** 中，指定一个有效的域。例如：**training.example.com**。
**注意**  
仅支持 HTTPS [TCP 端口 443] 上的嵌入式流式传输会话。

1. 选择**更新**。

# 步骤 2：为用户身份验证创建流式传输 URL
<a name="create-streaming-url-user-authentication"></a>

您必须创建一个直播 URL 才能对嵌入式 WorkSpaces 应用程序流式传输会话的用户进行身份验证。嵌入式流式传输会话目前不支持 SAML 2.0 和用户池。要创建流式传输 URL，请使用以下其中一种方法：
+ WorkSpaces 应用程序控制台
+ 网[CreateStreaming址](https://docs.aws.amazon.com/appstream2/latest/APIReference/API_CreateStreamingURL.html) API 操作 
+ C [create-streaming-url](https://docs.aws.amazon.com/cli/latest/reference/appstream/create-streaming-url.html) AWS LI 命令

## 使用自定义域的配置要求
<a name="configuration-requirements-custom-domains"></a>

无论您是使用自定义域名来应用您的公司品牌，还是为了确保嵌入式 WorkSpaces 应用程序流式传输会话与阻止第三方 Cookie 的浏览器配合使用，配置要求都是一样的。

对于阻止第三方 Cookie 的 Web 浏览器，需要自定义域。 WorkSpaces 应用程序使用浏览器 Cookie 对流媒体会话进行身份验证，并允许用户重新连接到活动会话，而无需每次都被提示提供登录凭据。默认情况下， WorkSpaces 应用程序流式传输 URLs 包含**appstream.com**为域。当您在网站中嵌入流式传输会话时，系统会将 **appstream.com** 视为第三方域。因此，当使用默认阻止第三方 Cookie 的现代浏览器时，可能会阻止流式传输会话。

为避免在这种情况下阻止嵌入式 WorkSpaces 应用程序流式传输会话，请执行以下步骤：

1. 指定一个自定义域来托管您的嵌入式 WorkSpaces 应用程序流式传输会话。

   配置自定义域名时，请确保该域名是您计划在其中嵌入 WorkSpaces 应用程序的网页的子域名。例如，如果更新堆栈以便将 **training.example.com** 指定为主机域，则可以为嵌入式流式传输会话创建一个名为 **content.training.example.com** 的子域。

1. 为使用相同自定义子域的嵌入式 WorkSpaces 应用程序流式传输会话创建直播 URL。要创建直播网址，请使用 [CreateStreamingURL](https://docs.aws.amazon.com/appstream2/latest/APIReference/API_CreateStreamingURL.html) API 操作或 [create-streaming-url](https://docs.aws.amazon.com/cli/latest/reference/appstream/create-streaming-url.html) AWS CLI 命令。在这种情况下，您无法使用 WorkSpaces 应用程序控制台创建直播 URL。

   要为嵌入式 WorkSpaces 应用程序流式传输会话创建流式传输 URL，请在 URL 中**appstream2.***region***.aws.amazon.com**替换为您自己的域。

   默认情况下， WorkSpaces 应用程序流媒体的格式 URLs 如下：

   ```
   https://appstream2.region.aws.amazon.com/authenticate?parameters=authenticationcode
   ```

   如果您的子域为 **content.training.example.com**，则新的流式传输 URL 将遵循以下格式：

   ```
   https://content.training.example.com/authenticate?parameters=authenticationcode
   ```
**注意**  
创建自定义域时，只能在配置该域的 AWS 区域中使用该域进行嵌入式 WorkSpaces 应用程序流式传输会话。如果您计划在多个区域中支持自定义域，请为每个适用区域创建一个自定义域。此外，仅支持 HTTPS [TCP 端口 443] 上的嵌入式流式传输会话。

1. 将 **appstream-custom-url-domain** 添加到将托管嵌入式流式传输会话的网页标头中。对于标头值，请使用您的反向代理向用户显示的域。例如：

   ```
   Header name: appstream-custom-url-domain
   Header value: training.example.com
   ```

   通过设置自定义域并创建指定同一域的流式传输 URL，可以将 Cookie 保存为第一方 Cookie。有关如何使用 Amazon 配置自定义域的信息 CloudFront，请参阅在[ WorkSpaces 应用程序中使用自定义域](https://aws.amazon.com/blogs/desktop-and-application-streaming/using-custom-domains-with-amazon-appstream-2-0/)。

为嵌入式 WorkSpaces 应用程序流式传输会话设置自定义域名后，如果您的直播 URLs 没有重定向到您的自定义域，或者您的自定义域名无法正确显示给您的用户，请参阅以下疑难解答主题：
+ [我为嵌入式 WorkSpaces 应用程序流式传输会话设置了自定义域，但是我的 WorkSpaces 应用程序流式传输 URLs 没有重定向到我的自定义域。](troubleshooting-general.md#embedded-streaming-sessions-streaming-urls-not-redirected-to-custom-domain)

# 步骤 3：下载嵌入式 Amazon WorkSpaces 应用程序文件
<a name="download-embed-files"></a>

要托管嵌入式 WorkSpaces 应用程序流式传输会话，必须下载并配置提供的 WorkSpaces 应用程序 API JavaScript 文件。

1. <version>在 “[在您的网站中嵌入 WorkSpaces 应用程序](https://clients.amazonappstream.com/embed.html)” 网页上，选择步骤 1 中的链接以下载 WorkSpaces 应用程序嵌入套件.zip 文件 **appstream** \$1embed\$1 .zip。

1. 导航到下载 .zip 文件的位置，并提取文件的内容。

1. 文件提取内容包括一个文件夹，即 **appstream-embed**。除 **COPYRIGHT.txt** 和 **THIRD\$1PARTY\$1NOTICES.txt** 文件以外，该文件夹还包含以下两个文件：
   + **appstream-embed.js** — 提供嵌入式 WorkSpaces 应用程序 API。此 JavaScript 文件包括用于配置和控制嵌入式 WorkSpaces 应用程序流式传输会话的函数和 API 操作。
   + **embed-sample.html**-介绍如何使用嵌入式 WorkSpaces 应用程序 API 初始化流式传输会话、调用函数和监听事件。此示例文件对本主题中的信息进行展开，向开发人员提供示例使用案例。

# 步骤 4：配置您的网站以便与 Amazon WorkSpaces 应用程序集成
<a name="configure-website-for-integration"></a>

以下各节提供有关如何配置您的网页以托管嵌入式 WorkSpaces 应用程序流式传输会话的信息。

**Topics**
+ [导入 appstream 嵌 JavaScript 入文件](#import-embed-javascript-file)
+ [初始化和配置 `AppStream.Embed` 接口对象](#initialize-configure-embed-interface-object)
+ [在 WorkSpaces 应用程序用户界面中隐藏项目的示例](#examples-hiding-user-interface-items)

## 导入 appstream 嵌 JavaScript 入文件
<a name="import-embed-javascript-file"></a>

1. 在您计划嵌入 WorkSpaces 应用程序流式传输会话的网页上，通过添加以下代码将 **appstream-embed.js** 文件导入网页：

   ```
   <script type="text/javascript" src="./appstream_embed.js"> </script>
   ```

1. 接下来，创建一个空的容器 div。您设置的 div 的 ID 将传递到 WorkSpaces 应用程序嵌入构造函数中。然后将其用于为流式传输会话注入 iframe。要创建 div，请添加以下代码：

   ```
   <div id="appstream-container"> </div>
   ```

## 初始化和配置 `AppStream.Embed` 接口对象
<a name="initialize-configure-embed-interface-object"></a>

要在中初始化`AppStream.Embed`接口对象 JavaScript，必须添加用于创建包含直播网址和用户界面配置选项的`AppStream.Embed`对象的代码。这些选项以及您创建的 div ID 存储在名为 `appstreamOptions` 的对象中。

以下示例代码显示了如何初始化 `AppStream.Embed` 接口对象。

```
var appstreamOptions = {
     sessionURL: 'https://appstream2.region.aws.amazon.com/authenticate?parameters=authenticationcode...',
     userInterfaceConfig:{[AppStream.Embed.Options.HIDDEN_ELEMENTS]:[AppStream.Embed.Elements.TOOLBAR]}
 };
 appstreamEmbed = new AppStream.Embed("appstream-container", appstreamOptions);
```

在代码中，*userInterfaceConfig*用您自己的值替换*sessionURL*和。

**注意**  
为指定的值会*userInterfaceConfig*隐藏整个 “ WorkSpaces 应用程序” 工具栏。示例中包含的此值可选。

***sessionUrl***  
您使用 WorkSpaces 应用程序控制台、URL API 操作或 [create-streaming-url](https://docs.aws.amazon.com/cli/latest/reference/appstream/create-streaming-url.html) AWS CLI 命令创建的直播[CreateStreaming网](https://docs.aws.amazon.com/appstream2/latest/APIReference/API_CreateStreamingURL.html)址。此参数区分大小写。  
**类型**：字符串  
**是否必需**：是

***userInterfaceConfig***  
生成用户界面元素初始状态的配置。该配置是一个键值对。  
密钥指定了初始化嵌入式 WorkSpaces 应用程序流式传输会话时最初隐藏的用户界面对象。`AppStream.Embed.Options.HIDDEN_ELEMENTS`以后，您可以使用 `getInterfaceState` 参数返回隐藏和可见对象。  
该值是常量数组（工具栏按钮）。有关可以使用的常量列表，请参阅 [使用 `HIDDEN_ELEMENTS`](constants-functions-events-embedded-sessions.md#constants-hidden-elements)。  
**类型**：地图 (*key*:*value*)  
**必需**：否

## 在 WorkSpaces 应用程序用户界面中隐藏项目的示例
<a name="examples-hiding-user-interface-items"></a>

本节中的示例说明了如何在嵌入式 WorkSpaces 应用程序流式传输会话期间向用户隐藏 WorkSpaces 应用程序用户界面中的项目。

**Topics**
+ [示例 1：隐藏整个 “ WorkSpaces 应用程序” 工具栏](#example-hide-the-entire-tooolbar)
+ [示例 2：隐藏 “ WorkSpaces 应用程序” 工具栏上的特定按钮](#example-hide-a-specific-toolbar-button)
+ [示例 3：隐藏 “ WorkSpaces 应用程序” 工具栏上的多个按钮](#example-hide-multiple-toolbar-buttons)

### 示例 1：隐藏整个 “ WorkSpaces 应用程序” 工具栏
<a name="example-hide-the-entire-tooolbar"></a>

要防止用户在嵌入式流式传输会话期间访问 WorkSpaces 应用程序工具栏上的任何按钮，请使用`AppStream.Embed.Elements.TOOLBAR`常量。此常量允许您隐藏所有 “ WorkSpaces 应用程序” 工具栏按钮。

```
var appstreamOptions = {
     sessionURL: 'https://appstream2.region.aws.amazon.com/authenticate?parameters=authenticationcode...',
     userInterfaceConfig:{[AppStream.Embed.Options.HIDDEN_ELEMENTS]:[AppStream.Embed.Elements.TOOLBAR]}
 };
```

### 示例 2：隐藏 “ WorkSpaces 应用程序” 工具栏上的特定按钮
<a name="example-hide-a-specific-toolbar-button"></a>

您可以显示 “ WorkSpaces 应用程序” 工具栏，同时防止用户在嵌入式流式传输会话期间访问特定的工具栏按钮。要执行此操作，请为要隐藏的按钮指定常量。以下代码使用 `AppStream.Embed.Elements.FILES_BUTTON` 常量来隐藏 **My Files (我的文件)** 按钮。这样可以防止用户在嵌入式流式传输会话期间访问持久性存储选项。

```
var appstreamOptions = {
     sessionURL: 'https://appstream2.region.aws.amazon.com/authenticate?parameters=authenticationcode...',
     userInterfaceConfig:{[AppStream.Embed.Options.HIDDEN_ELEMENTS]:[AppStream.Embed.Elements.FILES_BUTTON]}
 };
```

### 示例 3：隐藏 “ WorkSpaces 应用程序” 工具栏上的多个按钮
<a name="example-hide-multiple-toolbar-buttons"></a>

您可以显示 WorkSpaces 应用程序工具栏，同时防止用户在嵌入式流式传输会话期间访问多个工具栏按钮。要执行此操作，请为要隐藏的按钮指定常量。以下代码使用 `AppStream.Embed.Elements.END_SESSION_BUTTON` 和 `AppStream.Embed.Elements.FULLSCREEN_BUTTON` 常量来隐藏 **End Session (结束会话)** 和 **Fullscreen (全屏)** 按钮。

**注意**  
使用逗号分隔每个常量（前后无空格）。

```
var appstreamOptions = {
     sessionURL: 'https://appstream2.region.aws.amazon.com/authenticate?parameters=authenticationcode... (https://appstream2.region.aws.amazon.com/#/)',
     userInterfaceConfig:{[AppStream.Embed.Options.HIDDEN_ELEMENTS]:[AppStream.Embed.Elements.END_SESSION_BUTTON,AppStream.Embed.Elements.FULLSCREEN_BUTTON]}
 };
```

# 嵌入式 Amazon WorkSpaces 应用程序流式传输会话的常量、函数和事件
<a name="constants-functions-events-embedded-sessions"></a>

以下主题提供了常量、函数和事件的参考信息，您可以使用这些信息来配置嵌入式 WorkSpaces 应用程序流式传输会话。

**Topics**
+ [使用 `HIDDEN_ELEMENTS`](#constants-hidden-elements)
+ [`AppStream.Embed` 对象的函数](#functions-embed-object)
+ [嵌入式 WorkSpaces 应用程序流媒体会话事件](#events-embedded-streaming-sessions)
+ [添加事件侦听器和结束嵌入式 WorkSpaces 应用程序流式传输会话的示例](#examples-add-event-listeners-end-embedded-streaming-session)

初始化嵌入式 WorkSpaces 应用程序流式传输会话时，可以将以下 WorkSpaces 应用程序用户界面元素传递到`HIDDEN_ELEMENTS`配置选项中。

## 使用 `HIDDEN_ELEMENTS`
<a name="constants-hidden-elements"></a>

初始化嵌入式 WorkSpaces 应用程序流式传输会话时，可以将以下 WorkSpaces 应用程序用户界面元素作为常量传递到`HIDDEN_ELEMENTS`配置选项中。

```
AppStream.Embed.Elements.TOOLBAR
AppStream.Embed.Elements.FULLSCREEN_BUTTON
AppStream.Embed.Elements.END_SESSION_BUTTON
AppStream.Embed.Elements.TOOLBAR
AppStream.Embed.Elements.CATALOG_BUTTON
AppStream.Embed.Elements.WINDOW_SWITCHER_BUTTON
AppStream.Embed.Elements.FILES_BUTTON
AppStream.Embed.Elements.CLIPBOARD_BUTTON
AppStream.Embed.Elements.COPY_LOCAL_BUTTON
AppStream.Embed.Elements.PASTE_REMOTE_BUTTON
AppStream.Embed.Elements.SETTINGS_BUTTON
AppStream.Embed.Elements.STREAMING_MODE_BUTTON
AppStream.Embed.Elements.SCREEN_RESOLUTION_BUTTON
AppStream.Embed.Elements.REGIONAL_SETTINGS_BUTTON
AppStream.Embed.Elements.FULLSCREEN_BUTTON
AppStream.Embed.Elements.END_SESSION_BUTTON
```

以下三个元素可以作为字符串（而不是作为常量）传递到 HIDDEN\$1ELENERS 中。


| 字符串 | 说明 | 
| --- | --- | 
| 'adminCommandsButton' | 当您连接到 WorkSpaces 应用程序映像生成器时，“管理命令” 按钮会显示在 WorkSpaces 应用程序工具栏的右上角。将此字符串传递到 HIDDEN\$1ELEMENTS 可以隐藏管理员命令按钮。 | 
| 'softKeyboardButton' | 在启用触控功能的设备上进行 WorkSpaces 应用程序流式传输会话期间，用户可以点击 WorkSpaces 应用程序工具栏上的键盘图标以显示屏幕键盘。将此字符串传递到 HIDDEN\$1ELEMENTS 可以隐藏键盘图标。 | 
| 'keyboardShortcutsButton' | 在启用触控功能的设备上进行 WorkSpaces 应用程序流式传输会话期间，用户可以点击 WorkSpaces 应用程序工具栏上的 Fn 图标来显示键盘快捷键。将此字符串传递到 HIDDEN\$1ELEMENTS 可以隐藏 Fn 图标。 | 

## `AppStream.Embed` 对象的函数
<a name="functions-embed-object"></a>

下表列出了可以在 `AppStream.Embed` 对象上执行的函数。


| 函数 | 说明 | 
| --- | --- | 
| AppStream.Embed(containerId:string, options:object) | AppStream.Embed 对象构造函数。该构造函数初始化 AppStream.Embed 对象并与其通信，并使用 div 容器 ID。该 ID 用于注入 iframe。它还会注入一个包含appstreamOptions（sessionURL和HIDDEN\$1ELEMENTS）配置选项的对象。 | 
| endSession() | 此函数终止流式传输会话，但不会销毁 iframe。如果您指定了重定向 URL，则 iframe 将尝试加载该 URL。根据页面的 CORS 标头，可能无法加载该 URL。 | 
| launchApp(appId:string) | 此函数使用映像创建期间指定的应用程序 ID，以编程方式启动应用程序。 | 
| launchAppSwitcher() | 此函数将AppSwitcher命令发送到 WorkSpaces 应用程序门户。这会在实例上触发 AppSwitcher 命令。 | 
| getSessionState() | 此函数返回 sessionStatus 的对象。有关更多信息，请参阅 [嵌入式 WorkSpaces 应用程序流媒体会话事件](#events-embedded-streaming-sessions)。 | 
| getUserInterfaceState() | 此函数返回 `UserInterfaceState` 的对象。该对象包含以下内容的键值对： `sessionStatus`：状态枚举 `sessionTerminationReason`：字符串 `sessionDisconnectionReason`：字符串  有关更多信息，请参阅 [嵌入式 WorkSpaces 应用程序流媒体会话事件](#events-embedded-streaming-sessions)。  | 
| addEventListener(name, callback) | 此函数添加了一个在触发指定事件时调用的回调函数。有关可以触发的事件列表，请参阅 [嵌入式 WorkSpaces 应用程序流媒体会话事件](#events-embedded-streaming-sessions)。 | 
| removeEventListener(name, callback) | 此函数删除指定事件的回调。 | 
| destroy() | 此函数删除 iframe 并清除资源。此函数不会影响正在进行的流式传输会话。 | 

## 嵌入式 WorkSpaces 应用程序流媒体会话事件
<a name="events-embedded-streaming-sessions"></a>

下表列出了在嵌入式 WorkSpaces 应用程序流式传输会话期间可以触发的事件。


| 事件 | 数据 | 说明 | 
| --- | --- | --- | 
| AppStream.Embed.Events.SESSION\$1STATE\$1CHANGE |  `sessionStatus`: `State enumeration` `sessionTerminationReason`：字符串 `sessionDisconnectionReason`：字符串  | 此事件在发生任何会话状态更改时触发。此事件包括已更改状态的映射。要检索完整会话状态，请使用 `getSessionState()` 函数。 以下是会话状态： `AppStream.Embed.SessionStatus.Unknown` - 会话未启动且未预留 `AppStream.Embed.SessionStatus.Reserved` - 会话已预留但未启动。 `AppStream.Embed.SessionStatus.Started` - 用户已连接到会话并已开始流式传输。 `AppStream.Embed.SessionStatus Disconnected ` - 用户已断开与会话的连接。 `AppStream.Embed.SessionStatus.Ended` - 会话已标记为已结束或已过期。  | 
| AppStream.Embed.Events.SESSION\$1INTERFACE\$1STATE\$1CHANGE | `hiddenElements`：字符串数组  `isFullscreen`：布尔值 `isSoftKeyboardVisible`：布尔值  | 此事件在发生任何会话状态更改时触发。此事件包括已更改状态的映射。要检索完整会话状态，请使用 getSessionState() 函数。 | 
| AppStream.Embed.Events.SESSION\$1ERROR | `errorCode`：数字 `errorMessage`：字符串  | 此事件在会话期间发生任何错误时触发。 | 

## 添加事件侦听器和结束嵌入式 WorkSpaces 应用程序流式传输会话的示例
<a name="examples-add-event-listeners-end-embedded-streaming-session"></a>

本节中的示例向您展示如何执行以下操作：
+ 为嵌入式 WorkSpaces 应用程序流式传输会话添加事件侦听器。
+ 以编程方式结束嵌入式 WorkSpaces 应用程序流式传输会话。

### 示例 1：为嵌入式 WorkSpaces 应用程序流式传输会话添加事件监听器
<a name="example-add-event-listeners"></a>

要针对嵌入式流式传输会话期间的会话状态更改、会话接口状态更改和会话错误添加事件侦听器，请使用以下代码：

```
appstreamEmbed.addEventListener(AppStream.Embed.Events.SESSION_STATE_CHANGE, updateSessionStateCallback);

appstreamEmbed.addEventListener(AppStream.Embed.Events.SESSION_INTERFACE_STATE_CHANGE, updateUserInterfaceStateCallback);

appstreamEmbed.addEventListener(AppStream.Embed.Events.SESSION_ERROR, errorCallback);
```

在此示例中，`AppStream.Embed.Events.SESSION_STATE_CHANGE`、`AppStream.Embed.Events.SESSION_INTERFACE_STATE_CHANGE` 和 `AppStream.Embed.Events.SESSION_ERROR` 是事件名称。

`updateSessionStateCallback`、`updateUserInterfaceStateCallback` 和 `errorCallback` 是您实施的函数。这些函数传递到 `addEventListener` 函数中，并在触发事件时调用。

### 示例 2：以编程方式结束嵌入式 WorkSpaces 应用程序流式传输会话
<a name="programmatically-end-embedded-streaming-session"></a>

要结束嵌入式 WorkSpaces 应用程序流式传输会话，请使用以下函数：

```
appstreamEmbed.endSession();
```