frame允许我们在多个独立于窗口的视图(view)里表现文档(document),多视图使我们很方便,比如我可以让有些信息可见、其他信息不可见(比如滚动显示)。举例来说,我们可以在同一个窗口内,让一个frame显示静态标签,而让另一个frame显示导航菜单,第三个frame显示能滚动的document,如何滚动却由第二个frame来选择。是不是很有意思?下面给出一个例子:
frameset 元素可定义一个框架集合。它被用来组织多个窗口(框架)。每个框架存有独立的文档。
<html>
<frameset cols="25%,50%,25%">
<frame src="/example/html/frame_a.html">
<frame src="/example/html/frame_b.html">
<frame src="/example/html/frame_c.html">
</frameset>
</html>
它的布局可能是这样的:
---------------------------------------
| | |
| | |
|
| Frame 1 |
| | |
| | |
|---------| |
| | Frame 3 |
| | |
| | |
| | |
| Frame 2 | |
| | |
| | |
| | |
| | |
---------------------------------------
在Qt中,QWebFrame类呈现网页中的frame。每个QWebPage对象包含至少一个frame,frame可以通过QWebPage::mainFrame()获取。更多的frame是通过HTML的标签<frame> 或者 <iframe>建立的。frame使用load() 或者 setUrl()函数加载。或者,如果你有HTML内容,也可以使用setHtml()函数加载它。page()函数返回网页对象的指针。参考QWebView的解释,它告诉我们网页frame是如何与page、view发生关联的。
QWebFrame也提供方法获取由frame加载的URL以及原来请求过的URL,参看requestedUrl()。这些方法使得我们可以获取DNS之前和之后的URL,或者加载期间发生重定向之前之后的URL。