在窗体上使用 IFRAME 和 Web 资源控件

 

发布日期: 2017年1月

适用于: Dynamics 365 (online),Dynamics 365 (on-premises),Dynamics CRM 2016,Dynamics CRM Online

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

备注

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

可使用 IFRAME 在窗体(如 ASP.NET 页)中显示另一网站的内容。 不支持在嵌入到另一个实体窗体中的 IFrame 内显示实体窗体。

可使用以下 Web 资源之一在窗体中显示 Web 资源的内容:

备注

仅为向后兼容性目的包括 Silverlight,但不建议这样做。详细信息:Silverlight (XAP) Web 资源

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

本主题内容

选择是否限制交叉框脚本

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

传递窗体数据

更改 URL

选择是否限制交叉框脚本

若您不完全信任 IFRAME 中显示的内容,请使用“限制交叉框架脚本(若支持)”选项。 选择此选项时,IFRAME 具有下表中列出的属性集。

属性

说明

security=”restricted”

此属性仅受不早于版本 6 的 Internet Explorer 支持。 安全属性会将用户安全设置“受限站点”应用于 IFRAME 的源文件。 (可在“Internet 选项”对话框的“安全性”选项卡上找到区域设置。) 默认情况下,受限站点区域中未启用脚本。 一旦更改区域的安全设置,就会出现各种消极结果,包括允许脚本运行。 有关详细信息,请参阅安全属性

sandbox=””

对于支持此属性的浏览器,实质上将 IFRAME 中的内容限制为仅显示信息。 以下限制将适用:

  • 禁用浏览器插件。

  • 禁用窗体和脚本。

  • 禁用指向其他浏览上下文的链接。

  • 即使域相同,也将其内容视为来自不同的域。

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

  • Internet Explorer 10、Internet Explorer 11 和 Microsoft Edge

  • Google Chrome

  • Apple Safari

  • Mozilla Firefox

有关沙盒属性的详细信息,请参阅:

启用IFrame跨领域通讯

有时,您想要对包含不同域上的内容的 IFRAME 启用通信。Window.postMessage 是一个浏览器方法,为不早于 Internet Explorer 8 的 Internet Explorer 版本提供该功能。Google Chrome、Mozilla Firefox和 Apple Safari 也支持它。 有关使用 postMessage 的详细信息,请参阅以下博客文章:

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

可以通过将参数传递给控件中定义的 URL 来提供上下文信息。 显示在框架中的页面必须能够处理传递给它的参数。 如果使用“将记录对象类型代码和唯一标识符作为参数传递”选项配置 IFRAME 或 Web 资源,则会传递下表中的所有参数。 相应的窗体 XML 元素是 <PassParameters> (FormXml)

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

参数

客户

说明

typename

实体名称

实体的名称。

type

实体类型代码

在特定组织内唯一标识实体的整数。

id

对象 GUID

代表记录的 GUID。

orgname

组织名称

组织的唯一名称。

userlcid

用户语言代码

当前用户使用的语言代码标识符。

orglcid

组织语言代码

表示组织的基本语言的语言代码标识符。

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

备注

建议您使用实体名称而不是类型代码,因为 Microsoft Dynamics 365 组织之间的自定义实体的实体类型代码可能不同。

示例

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

http://myserver/mypage.aspx

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

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

读取传递的参数

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

传递窗体数据

对包含要传递到其他网站的数据的属性使用 getValue 方法,并创建其他页面能够使用的由查询字符串参数组成的字符串。 然后,使用字段 OnChange 事件IFRAME OnReadyStateComplete 事件选项卡 TabStateChange 事件以及 setSrc 方法将您的参数追加到 IFRAME 或 Web 资源的 src 属性中。

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

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

更改 URL

考虑到窗体中的数据以及用户是否脱机工作等因素,您可能需要更改 IFRAME 的目标。 您可以动态设置 IFRAME 的目标。

备注

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

示例

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

//Get the value of an option set attribute
var value = Xrm.Page.data.entity.attributes.get("new_pagechooser").getValue();
var newTarget = "";
//Set the target based on the value of the option set
switch (value) {
    case 100000001:
        newTarget = "http://myServer/test/pageOne.aspx";
        break;
    default:
        newTarget = "http://myServer/test/pageTwo.aspx";
        break;
}
//Get the default URL for the IFRAME, which includes the 
// query string parameters
var IFrame = Xrm.Page.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);

另请参阅

为 Microsoft Dynamics 365 窗体编写代码
通过 Microsoft Dynamics 365 使用 JavaScript
脚本即时引用的表单

Microsoft Dynamics 365

© 2017 Microsoft。 保留所有权利。 版权