一個(gè)HTML頁面可以有一個(gè)或多個(gè)子框架,,這些子框架以<iframe>或<frame>來標(biāo)記,,用來顯
示一個(gè)獨(dú)立的HTML頁面,。本節(jié)介紹框架的自我控制及框架之間的相互訪問,,例如從一個(gè)框架中引用另
一個(gè)框架中的JavaScript變量,,調(diào)用其他框架內(nèi)的函數(shù),,控制另一個(gè)框架中表單的行為等,。
第一節(jié) 框架的引用
在一個(gè)HTML 頁面中,所有的框架以集合的形式作為window 對(duì)象的屬性提供,例如
window.frames表示該頁面內(nèi)所有框架的集合,,這和表單對(duì)象、鏈接對(duì)象等類似,。不同的是,,這些集
合是document的屬性,,因此,,要引用一個(gè)子框架,可以使用如下語法:
window.frames["frameName"]
window.frames.frameName
window.frames[index]
其中,window字樣也可以用self代替或省略,,假設(shè)frameName為頁面中第一個(gè)框架,,則以下寫法
是等價(jià)的:
window.frames["frameName"]
self.frames["frameName"]
self.frames[0]
frames[0]
frameName
每個(gè)框架都對(duì)應(yīng)一個(gè)HTML頁面,所以這個(gè)框架也是一個(gè)獨(dú)立的瀏覽器窗口,,它具有窗口的所有
性質(zhì),,對(duì)框架的引用也就是對(duì)window對(duì)象的引用。有了這個(gè)window對(duì)象,,就可以很方便地對(duì)其中的
頁面進(jìn)行操作,,例如使用window.document對(duì)象向頁面寫入數(shù)據(jù),、使用window.location屬性來
改變框架內(nèi)的頁面等,。下面分別介紹不同層次框架間的相互引用,。
1,、父框架到子框架的引用
從父框架引用子框架的方法為:
window.frames["frameName"]
這樣就引用了頁面內(nèi)名為frameName的子框架,,如果要引用子框架內(nèi)的子框架,,事實(shí)上,引用
的框架就是window對(duì)象,,實(shí)現(xiàn)方法如下:
window.frames["frameName"].frames["frameName2"]
這樣就很容易引用到了二級(jí)子框架,,依次類推,,可以實(shí)現(xiàn)多層框架的引用,。
2,、子框架到父框架的引用
每個(gè)window對(duì)象都有一個(gè)parent屬性,,表示它的父框架,。如果該框架已經(jīng)是頂層框架,,則
window.parent還表示該框架本身,,例如,,先創(chuàng)建一個(gè)TestA.html文件,,其代碼如下:
<html>
<head><title>父頁面</title></head>
<body>
<form name="formA" id="formA">
<input type="text" name="username" id="username"/>
</form>
<iframe src="TestB.html" width="100%"></iframe>
</body>
</html>
在上面代碼中,,定義了一個(gè)iframe 框架并把TestB.html 文件放在其中,如果需要在
TestB.html中對(duì)TestA.html中的username文本框賦值,,就應(yīng)該在TestB.html中實(shí)現(xiàn)如下代碼:
<script type="text/javascript">
var parentWin=window.parent;
parentWin.formA.username.value="javakc";
</script>
3,、兄弟框架間的引用
如果兩個(gè)框架為同一個(gè)框架的子框架,它們稱為兄弟框架,,可以通過父框架來實(shí)現(xiàn)互相引用,,例
如一個(gè)頁面包括2個(gè)子框架
<frameset rows="30%,70%">
<frame src="left.html" name="frame1"/>
<frame src="main.html" name="frame2"/>
</frameset>
在frame1中可以使用如下語句來引用frame2。
self.parent.frames["frame2"]
4,、不同層次框架間的相互引用
框架的層次是針對(duì)頂層框架而言的,。當(dāng)層次不同時(shí),只要知道自己所在的層次以及另一個(gè)框架所在
49
《Java快車---基礎(chǔ)教程》 www. TEL:010-62972039
的層次和名字,,利用框架引用的window對(duì)象性質(zhì),,就可以很容易地實(shí)現(xiàn)互相訪問,例如:
self.parent.frames["childName"].frames["targetFrameName"]
5,、對(duì)頂層框架的引用
和parent屬性類似,,window對(duì)象還有一個(gè)top屬性,,它表示對(duì)頂層框架的引用,,可以用來一
個(gè)框架自身是否為頂層框架,,例如:
top.window.formA.username.value="javakc";
也可以采用下面代碼驗(yàn)證本框架是否為頂層框架
if(self==top){
//too do
}
對(duì)于框架的引用就是對(duì)“window”對(duì)象的引用,,利用window對(duì)象的location屬性,,可以改變
框架的導(dǎo)航,,例如
window.frames[0].location="index.html";
這就是將頁面中的第一個(gè)框架的頁面重定向到index.html,,利用這個(gè)性質(zhì),,甚至可以使用一條
鏈接來更多的框架,,例如:
<frameset rows="30%,70%">
<frame src="left.html" name="frame1"/>
<frame src="main.html" name="frame2"/>
</frameset>
<a href="frame1.location='index.html';frame2.loaction='top.html'">link</a>