在表单上使用 IFRAME 和 Web 资源控件

IFRAME 和 Web 资源控件使用 HTML IFRAME 元素将来自页面中其他位置的内容嵌入到页面中。

注释

您为窗体选择的设计也用于 Dynamics 365 for Outlook 的阅读窗格和适用于平板电脑的 Dynamics 365 使用的窗体。 Web 资源和 IFRAME 无法在 Dynamics 365 for Outlook 阅读窗格中显示,但它们在适用于平板电脑的 Dynamics 365 中是受支持的。 如果您的 IFRAME 依赖于对 Xrm 页面对象或任何表单事件处理程序的访问,则应配置 IFRAME,使其在默认情况下不可见。

Web 资源或 Power Apps component framework 不支持受身份验证边界保护的 IFRAMEing 内容。 如果用户直接登录到外部服务,则某些嵌入式 IFRAME 可能会在浏览器客户端中工作,但这在移动或平板电脑应用程序中不受支持。 不支持在 IFRAME 中嵌入实体窗体并嵌入到另一个实体窗体的特定场景。

您可以使用 IFRAME 在表单中显示其他网站的内容,例如,在 ASP.NET 页中。 不支持在另一个实体窗体中显示嵌入 IFrame 的实体窗体。

您可以使用以下 Web 资源之一在表单中显示 Web 资源的内容:

注释

Silverlight 仅用于向后兼容,不建议使用。 更多信息:Silverlight (XAP) Web 资源

以下各节介绍了如果您希望这些控件显示的不仅仅是静态内容,您可以选择的选项。

选择是否限制跨框架脚本

当您不完全信任 IFRAME 中显示的内容时,请使用在支持的地方限制跨框架脚本选项。 选择此选项后,IFRAME 将设置下表中列出的属性。

特征 DESCRIPTION
security="restricted" 只有不早于版本 6 的 Internet Explorer 版本支持此属性。 security 属性将用户安全设置 Restricted Sites 应用于 IFRAME 的源文件。 (区域设置位于 Internet 选项 对话框的 安全 选项卡上。默认情况下,在 Restricted Sites 区域中不启用脚本。 通过更改区域的安全设置,可能会出现各种负面结果,包括允许脚本运行。 有关详细信息,请参阅 安全属性
sandbox="" 对于支持此属性的浏览器,IFRAME 中的内容基本上仅限于显示信息。 可以应用以下限制:

- 浏览器插件被禁用。
- 表单和脚本被禁用。
- 指向其他浏览上下文的链接被禁用。
- 即使域相同,内容也会被视为来自不同域。

此属性由 W3C 定义,并受以下浏览器支持:

- Internet Explorer 10、Internet Explorer 11 和 Microsoft Edge
- 谷歌浏览器
- 苹果 Safari 浏览器
- Mozilla 火狐浏览器

有关 sandbox 属性的更多信息,请参阅:

- 如何使用 HTML5 Sandbox 保护您的网站
- 沙盒

启用跨域的 IFrame 通信

有时,您可能希望为包含来自不同域内容的 IFRAME 开启通信功能。 Window.postMessage 是一种浏览器方法,它为不早于 Internet Explorer 8 的 Internet Explorer 版本提供此功能。 Google Chrome、Mozilla Firefox 和 Apple Safari 也支持它。 有关使用 postMessage的更多信息,请参阅以下博客文章:

传递有关记录的上下文信息

您可以通过将参数传递给控件中定义的 URL 来提供上下文信息。 框架中显示的页面必须能够处理传递给它的参数。 如果通过使用 传递记录对象类型代码和唯一标识符作为参数 选项来配置 IFRAME 或 Web 资源,则下表中的所有参数都会被传递。

您可以指定是否传递下表中的所有参数。

参数 名称 DESCRIPTION
typename 实体名称 实体的名称。
type 实体类型代码 唯一标识特定组织中的实体的整数。
id 对象 GUID 表示记录的 GUID。
orgname 组织名称 组织的唯一名称。
userlcid 用户语言代码 当前用户正在使用的语言代码标识符。

四位数或五位数区域设置 ID 的语言代码。 可在区域设置 ID (LCID) 图表中找到有效区域设置 ID 值。

注释

我们建议您使用实体名称而不是类型代码,因为自定义实体的实体类型代码在 Dynamics 365 Customer Engagement (on-premises) 组织之间可能有所不同。

示例:

以下示例显示了不带参数的 URL。

https://myserver/mypage.aspx  

以下示例显示了带参数的 URL。

https://myserver/mypage.aspx?id=%7bB2232821-A775-DF11-8DD1-00155DBA3809%7d&orglcid=1033&orgname=adventureworkscycle&type=1&typename=account&userlcid=1033  

读取传递的参数

通常使用 HttpRequest.QueryString 属性在目标 .aspx 页中读取传递的参数。 在 HTML 页面中,可以使用 JavaScript 中的 window.___location.search 属性访问参数。 有关详细信息,请参阅 HttpRequest.QueryString 属性搜索属性

传递窗体数据

对包含要传递给其他网站的数据的属性使用 getValue 方法,并编写其他页面将能够使用的查询字符串参数的字符串。 然后使用 Field OnChange EventIFRAME OnReadyStateComplete EventTab TabStateChange EventsetSrc 方法将参数 src 附加到 IFRAME 或 Web 资源的属性。

如果您使用 data 参数将数据传递给 Silverlight Web 资源,则可以使用 getDatasetData 方法来操作通过 data 参数所传递的值。 对于网页(HTML)资源,使用 setSrc 方法直接操作 querystring 参数。

避免使用 OnLoad 事件。 IFRAME 和 Web 资源异步加载,Onload 事件脚本完成之前,iframe 可能尚未完成加载。 src这可能会导致您更改的 IFRAME 或 Web 资源的属性被 IFRAME 或 Web 资源 URL 属性的默认值覆盖。

更改 URL

您可能希望根据表单中的数据或用户是否脱机工作等注意事项来更改 IFRAME 的目标。 您可以动态设置 IFRAME 的目标。

注释

当您更改 IFRAME 的目标页面时,参数不会自动传递到新 URL。 在使用 setSrc 该方法之前,您必须将查询字符串参数附加到 URL。

示例:

以下示例演示如何使用选项集字段的 onChange 事件设置 IFRAME 和任何参数的 src 属性。

//Get the value of an option set attribute
var formContext = executionContext.getFormContext();
var value = formContext.getAttribute("new_pagechooser").getValue();  
var newTarget = "";  
//Set the target based on the value of the option set  
switch (value) {  
    case 100000001:  
        newTarget = https://myServer/test/pageOne.aspx;  
        break;  
    default:  
        newTarget = https://myServer/test/pageTwo.aspx;  
        break;  
}  
//Get the default URL for the IFRAME, which includes the   
// query string parameters  
var IFrame = formContext.ui.controls.get("IFRAME_test");  
var Url = IFrame.getSrc();  
// Capture the parameters  
var params = Url.substr(Url.indexOf("?"));  
//Append the parameters to the new page URL  
newTarget = newTarget + params;  
// Use the setSrc method so that the IFRAME uses the  
// new page with the existing parameters  
IFrame.setSrc(newTarget);

旧 Web 客户端和统一接口之间的布局差异

与旧版 Web 客户端应用程序相比,配置为使用一定行数的 Web 资源控件在统一接口应用程序中将具有不同的高度。 这是因为统一接口和旧 Web 客户端之间的行高存在差异。 如果旧 Web 客户端和统一接口中都需要窗体,您可以在统一接口应用和旧 Web 客户端应用中使用不同的窗体,并将控件配置为在每个窗体中使用适当的行数。

另请参阅

Customer Engagement 中使用 JavaScript 的客户端脚本
将 JavaScript 与 Customer Engagement 结合使用