某些 HTML 文档由 框架或窗口组成,这些窗口可以保存其自己的不同 HTML 文档。 使用框架可以轻松创建 HTML 页面,其中一个或多个页面片段保持静态,例如导航栏,而其他框架会不断更改其内容。
HTML 作者可以通过以下两种方式之一创建框架:
- 使用
FRAMESET
和FRAME
标签来创建固定窗口。
-或-
-
IFRAME
使用标记创建可在运行时重新定位的浮动窗口。
由于框架包含 HTML 文档,因此它们以窗口元素和框架元素的形式在文档对象模型(DOM)中表示。
当您使用HtmlWindow的 Frames 集合来访问
FRAME
或IFRAME
标记时,即在检索与该框架对应的窗口元素。 这表示框架的所有动态属性,例如其当前 URL、文档和大小。当您使用HtmlWindow的WindowFrameElement属性、Children集合或如GetElementsByName、GetElementById的方法来访问
FRAME
或IFRAME
标记时,您正在检索框架元素。 这表示框架的静态属性,包括原始 HTML 文件中指定的 URL。
帧和安全性
由于托管 HTML DOM 实现了称为 跨帧脚本安全性的安全措施,因此对帧的访问非常复杂。 如果文档包含一个FRAMESET
,并且在不同域中有两个或更多FRAME
,则这些FRAME
无法相互交互。 换句话说, FRAME
显示网站中的内容无法访问托管第三方网站的信息 FRAME
,例如 http://www.adatum.com/
。 此安全性在类级别 HtmlWindow 实现。 可以获取有关托管另一网站的FRAME
的常规信息,例如其 URL,但您将无法访问Document,也不能更改其托管的FRAME
和IFRAME
的大小或位置。
此规则也适用于使用Open和OpenNew方法打开的窗口。 如果打开的窗口与控件中 WebBrowser 托管的页面位于不同的域中,则无法移动该窗口或检查其内容。 如果使用 WebBrowser 控件显示与用于部署基于 Windows 窗体的应用程序的网站不同的网站,也会强制实施这些限制。 如果使用 ClickOnce 部署技术从网站 A 安装应用程序,并且使用该 WebBrowser 技术显示网站 B,则无法访问网站 B 的数据。