在托管 HTML 文档对象模型中访问框架

一些 HTML 文档是由框架或可以存放其自身独特的 HTML 文档的窗口组成的。 使用框架可以轻松地创建 HTML 页面,页面中的一个或多个部分(如导航栏)保持静态,而其它框架则不断更改内容。

HTML 作者可通过以下两种方式之一创建框架:

  • 使用 FRAMESETFRAME 标记,创建固定窗口。

- 或者 -

  • 使用 IFRAME 标记,创建一个可以在运行时重新定位的浮动窗口。
  1. 由于框架包含 HTML 文档,所以它们在文档对象模型 (DOM) 中表示为窗口元素和框架元素。

  2. 通过使用 HtmlWindow 的框架集合访问 FRAMEIFRAME 标记时,就是在检索与该框架对应的窗口元素。 这表示框架的所有动态属性,如框架的当前 URL、文档和大小。

  3. 通过使用 HtmlWindowWindowFrameElement 属性、Children 集合或者诸如 GetElementsByNameGetElementById 等方法访问 FRAMEIFRAME 标记时,就是在检索框架元素。 这表示框架的静态属性,包括原始 HTML 文件中指定的 URL。

框架和安全性

由于托管的 HTML DOM 实现称为跨框架脚本安全的安全措施,因此对框架的访问十分复杂。 如果文档包含在不同域中具有两个或多个 FRAMEFRAMESET,则这些 FRAME 相互之间不能交互。 换言之,显示来自你的网站的内容的 FRAME 不能访问托管第三方站点(如 http://www.adatum.com/)的 FRAME 中的信息。 在 HtmlWindow 类级别实现此安全。 可以获取有关托管另一个网站的 FRAME 的常规信息(如其 URL),但不能访问其 Document 或更改其宿主 FRAMEIFRAME 的大小或位置。

此规则也适用于使用 OpenOpenNew 方法打开的窗口。 如果打开的窗口位于与 WebBrowser 控件中托管的页面不同的域中,则你将不能移动该窗口或检查其内容。 如果使用 WebBrowser 控件来显示与用于部署基于 Windows 窗体的应用程序的网站不同的网站,也会强制这些限制。 如果使用 ClickOnce 部署技术来安装来自网站 A 的应用程序,并且使用 WebBrowser 来显示网站 B,将不能访问网站 B 的数据。

另请参阅